繁体   English   中英

从 C++ 中的字符串中删除多余的空格

[英]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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM