[英]Remove out excess spaces from string in 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
。
你能解释一下为什么程序没有删除this
和is
之间的一个空格,以及为什么我得到正确的输出?
注意:我不能使用辅助字符串。
那是因为当你的最后一个while循环找到你的字符之间的空间(这是)控制传递来增加你的for循环的一部分,这将增加int i的值然后它将指向给定字符串的下一个字符,即i(这个我是字符串),这就是为什么(这是)之间有空格。
当s[i]==' '
时,您的第二个while
循环将中断。 但是随后您的for
循环将增加i
和s[i]
因为i
将被跳过。 这将发生在每个单词之后的每个第一个空格字符上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.