在c++中删除字符串中多余的空格



我编写了一个程序,用于从字符串中删除多余的空格。

#include <iostream>
#include <string>
void RemoveExcessSpaces(std::string &s) {
for (int i = 0; i < s.length(); i++) {
while (s[i] == ' ')s.erase(s.begin() + i);
while (s[i] != ' ' && i < s.length())i++;
}
if (s[s.length() - 1] == ' ')s.pop_back();
}
int main() {
std::string s("  this is   string  ");
RemoveExcessSpaces(s);
std::cout << """ << s << """;
return 0;
}

有一件事我不清楚。这个while (s[i] == ' ')s.erase(s.begin() + i);应该删除字符串中的每个空格,所以输出将是thisisstring,但我得到的正确输出是this is string

你能解释一下为什么程序没有删除thisis之间的一个空格,为什么我得到了正确的输出?

注意:我不能使用辅助字符串

这是因为当你的最后一个while循环查找字符之间的空格(这是)控制传递以增加for循环的部分这将增加int i的值然后它将指向给定字符串的下一个字符i(thisi)这就是为什么在这是之间有空格的原因。) .

第二个while循环将在s[i]==' '。但是你的for循环将增加is[i],因为i将被跳过。这将在每个单词后的第一个空格字符发生。

最新更新