C++ 实现字符串处理和反转操作的巧妙方法
在字符串处理过程中,我们经常会遇到一些复杂的需求,如去除字符串两端的空格、按空格拆分字符串、翻转单词顺序等。本文将详细介绍如何在C++中高效实现这些操作。
实现代码
首先,我们来看一下完整的实现代码:
class Solution {
public:// 去除字符串前后的空格string trim(string str) {int first = str.find_first_not_of(' ');int last = str.find_last_not_of(' ');if (first == string::npos || last == string::npos) {return "";}return str.substr(first, last - first + 1);}// 按空格拆分字符串vector<string> split(string str) {istringstream iss(str);string word;vector<string> result;while (iss >> word) {result.push_back(word);}return result;}// 反转单词顺序string reverseWords(string s) {vector<string> ans = split(trim(s));string result;reverse(ans.begin(), ans.end());for (const string temp : ans) {if (!result.empty()) {result += " ";}result += temp;}return result;}
};
1. 去除字符串前后的空格
处理字符串时,首先要去除字符串前后的空格。我们可以使用std::string
的find_first_not_of
和find_last_not_of
方法来实现:
string trim(string str) {int first = str.find_first_not_of(' ');int last = str.find_last_not_of(' ');if (first == string::npos || last == string::npos) {return "";}return str.substr(first, last - first + 1);
}
详细解释:
find_first_not_of(' ')
:找到第一个非空格字符的位置。find_last_not_of(' ')
:找到最后一个非空格字符的位置。- 如果字符串全是空格,则返回空字符串。
- 使用
substr
提取非空格部分的子字符串。
2. 按空格拆分字符串
拆分字符串是处理文本的一部分。在C++中,我们可以使用std::istringstream
来按空格分割字符串:
vector<string> split(string str) {istringstream iss(str);string word;vector<string> result;while (iss >> word) {result.push_back(word);}return result;
}
详细解释:
- 使用
std::istringstream
将字符串转换为输入流。 - 使用
>>
运算符从输入流中读取单词,逐个存入std::vector
中。
3. 巧妙处理空格串,翻转单词顺序
在翻转单词顺序时,我们需要将拆分后的单词存入一个std::vector
中,然后进行反转操作:
string reverseWords(string s) {vector<string> ans = split(trim(s));string result;reverse(ans.begin(), ans.end());for (const string temp : ans) {if (!result.empty()) {result += " ";}result += temp;}return result;
}
详细解释:
- 使用前面定义的
trim
方法去除字符串前后的空格。 - 使用
split
方法按空格拆分字符串。 - 使用
std::reverse
方法反转存储单词的std::vector
。 - 遍历反转后的
std::vector
,逐个将单词组合成一个新字符串。 - 在组合单词时,判断
result
是否为空,非空时添加空格。
总结
通过上述方法,我们可以高效地处理字符串,去除空格、拆分单词并翻转单词顺序。使用std::string
、std::istringstream
和std::vector
等标准库,可以简化代码实现,提高可读性和维护性。