簡體   English   中英

為什么for循環不斷在else語句處停止?

[英]Why does the for loop keep stopping at else statement?

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

main()
{
string str1;
char strArray[80];
cout << "Enter string: ";
getline(cin, str1);

transform(str1.begin(), str1.end(), str1.begin(), ::tolower);

for(int i = 0;i < str1.length();i++)
{
    if(str1[i] == ' ' || str1[i] == ',' || str1[i] == '.')
    {

    }
    else
    {
        strArray[i] = str1[i];
    }
}

cout << strArray;
return 0;
}

for循環在找到空格,逗號或句點后會繼續停止。 有人可以向我解釋為什么會這樣嗎?

問題是,即使您從輸入中刪除了一個字符, i一直在遞增。 它實際上並沒有停止,只是跳過了一個字符。 由於strArray現在有一個孔,因此該孔很可能用0填充,從而結束了C字符串。 PS不能保證此行為,並且您可能在另一次運行程序時得到完全不同的結果。

調用擦除時,它會影響容器,因此您需要進行處理。 delete()將迭代器返回到已刪除元素之后的下一個元素,因此應改用該元素:

int i = 0;
for(string::iterator it = str1.begin(); it != str1.end(); )
{
    if(*it == ' ' || *it == ',' || *it == '.') 
    {
        it = str1.erase(it);
    }
    else
    {
        strArray[i++] = *it++;
    }
}
strArray[i] = '\0'; // terminate string

您可以張貼為str1輸入的字符串嗎? 因為我嘗試運行它,所以它運行得很好,沒有停止。 我在您的代碼中發現的唯一問題是,您在循環中擦除了字符,這將導致錯誤的結果字符串。

您正在擦除字符串中的字符,同時仍繼續增加計數器。 for循環中刪除++i 將其放在else子句下。

for(int i = 0;i < str1.length();)
{
   if(str1[i] == ' ' || str1[i] == ',' || str1[i] == '.')
   {
      str1.erase(i, 1);
   }
   else
   {
      strArray[i] = str1[i];
      ++i;
   }
}
strArray[str1.length()] = '\0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM