根据单词数量反转字符串


字符串操作是编程中一项必不可少的技能,因为它可以帮助我们高效地处理和分析文本数据。C++ 提供了一套丰富的字符串操作函数和对象,使处理文本数据变得更加容易。

在本文中,我们将讨论如何在 C++ 中根据单词数量反转字符串。

方法

方法 1 − 使用字符串流和向量

方法 2 − 使用子字符串和字符串操作函数

语法

C++ 中的字符串对象:std::string 类是 C++ 标准库的一部分,并提供了各种字符串操作函数。

字符串操作函数:C++ 中一些常见的字符串操作函数包括 length()、substr()、find()、erase() 和 replace()。

std::string reverseStringByWords(const std::string& input) {}
std::reverse(words.begin(), words.end());

方法 1:- 使用字符串流和向量

代码中采用的这种方法涉及使用字符串流对象将输入字符串转换为一系列单词。然后,从流中逐个提取单词,并存储在由向量表示的字符串集合中。

随后,使用算法库中的 reverse 函数反转单词集合。然后将反转后的单词连接在一起形成最终的输出字符串,除了最后一个单词之外,每个单词后面都附加一个空格。

算法

  • 开始

  • 获取输入字符串。

  • 从输入字符串创建字符串流。

  • 初始化一个空向量来存储单词。

  • 遍历字符串流以提取单词。

  • 从字符串流中提取一个单词。

  • 将提取的单词推入向量中。

  • 反转包含单词的向量。

  • 初始化一个空输出字符串。

  • 遍历反转后的向量以形成输出字符串。

  • 将反转后的向量中的每个单词添加到输出字符串中,后跟一个空格。

  • 从输出字符串中删除最后一个空格。

  • 返回输出字符串。

  • 结束

示例

该代码体现了一个反转指定字符串中单词顺序的过程。这是通过首先利用字符串流对象将输入字符串转换为基于单词的流来实现的。随后,单词被逐个提取并放入向量中。然后,使用算法库中的 reverse 函数反转向量。最后,反转后的单词连接在一起形成最终的输出字符串,并在每个单词(最后一个单词除外)后插入空格。然后从输出字符串中删除最后一个空格,从而提供了一个简洁易懂的解决方案,该方案充分利用了标准库的功能,如字符串流、向量和算法库。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

std::string reverseStringByWords(const std::string& input) {
   std::stringstream ss(input);
   std::string word;
   std::vector<std::string> words;

   while (ss >> word) {
      words.push_back(word);
   }

   std::reverse(words.begin(), words.end());

   std::string output;
   for (const auto& w : words) {
      output += w + " ";
   }

   output.pop_back(); // Remove the last space
   return output;
}

int main() {
   std::string input = "Hello, how are you?";
   std::string output = reverseStringByWords(input);
   std::cout << "Input: " << input << std :: endl;
   std:: cout << "Output: " << output << std :: endl;
   return 0;
}

输出

Input: Hello, how are you?
Output: you? are how Hello,

方法 2:- 使用子字符串和字符串操作函数

方法 2 是反转字符串中单词顺序的另一种解决方案。它使用子字符串和字符串操作函数,而不是像方法 1 中那样使用字符串流和向量。

此方法涉及手动将输入字符串划分为子字符串,这些子字符串表示各个单词。子字符串以相反的顺序连接起来形成最终的输出字符串。

算法

  • 开始

  • 获取输入字符串。

  • 初始化两个 size_t 变量 start 和 end,以保存输入字符串中单词的起始和结束位置。

  • 将起始位置初始化为 0。

  • 查找输入字符串中第一个空格的位置,并将其存储在 end 变量中。

  • 初始化一个空输出字符串。

  • 遍历输入字符串并使用子字符串提取单词。

  • 从起始位置到结束位置提取子字符串。

  • 将提取的子字符串连接到输出字符串的前面,后跟一个空格。

  • 将起始位置更新到结束位置之后的位置。

  • 从新的起始位置开始查找输入字符串中的下一个空格,并更新结束位置。

  • 循环结束后,使用

  • 结束

示例

该代码是用于反转给定字符串中单词顺序的解决方案。它通过使用 find 函数将输入字符串划分为子字符串,并将这些子字符串以相反的顺序连接起来以形成输出字符串来实现此目的。然后,使用 pop_back 函数从输出字符串中删除最后一个空格字符。与方法 1 相比,此方法更手动且更低级,需要更深入地了解字符串操作。该代码获取给定的输入字符串,将其划分为子字符串,反转这些子字符串的顺序,并返回最终的输出字符串。

#include <iostream>
#include <string>

std::string reverseStringByWords(const std::string& input) {
   size_t start = 0;
   size_t end = input.find(' ');
   std::string output;

   while (end != std::string::npos) {
      output = input.substr(start, end - start) + " " + output;
      start = end + 1;
      end = input.find(' ', start);
   }
    
   output = input.substr(start) + " " + output;
   output.pop_back(); // Remove the last space
   return output;
}

int main() {
   std::string input = "Hello, how are you?";
   std::string output = reverseStringByWords(input);
   std::cout << "Input: " << input << std::endl;
   std::cout << "Output: " << output << std::endl;

   return 0;
}

输出

Input: Hello, how are you?
Output: you? are how Hello,

结论

字符串操作在编程中的重要性:掌握字符串操作技巧对于任何程序员来说都是至关重要的,因为文本数据在软件开发中无处不在。了解各种字符串操作方法可以帮助开发人员编写更高效、更易维护和更健壮的代码。

更新于: 2023-07-21

193 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告