我已經撰寫了從字串中洗掉多余空格的程式。
#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以及為什么我得到了正確的輸出嗎?
注意:我不能使用輔助字串。
uj5u.com熱心網友回復:
那是因為當你的最后一個while回圈找到你的字符之間的空間(這是)控制傳遞來增加你的for回圈的一部分,這將增加int i的值然后它將指向給定字串的下一個字符,即i(這個我是字串),這就是為什么(這是)之間有空格。
uj5u.com熱心網友回復:
您的第二個while回圈將在s[i]==' '. 但是隨后您的for回圈將增加i,s[i]因此i將被跳過。這將發生在每個單詞之后的每個第一個空格字符上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492567.html
