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