簡體   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