2017-06-12 178 views
-1

所以我有一個簡單的JSON字符串,我用for循環迭代(不要問爲什麼我不使用json解析器)。 在這個循環中我想踢出來{}和「」 (錯位}只是有用於調試的原因) 下面是代碼:For循環字符串忽略字符

std::string str("{'pi': 3.141, 'happy': }true }"); 
for (int i = 0; i < str.length(); i++) 
{ 
    char temp = str[i]; 
    if (temp == '{' || temp == '}' || temp == ' ') 
     str.erase(i, 1); 
} 

不是很複雜,它基本上只是罰款但由於某種原因,}被跳過。它只是遍歷字符串,就像它不會在那裏一樣。任何人都可以重現這種行爲?我完全沒有想法這裏可能是錯的。

編輯: 好吧,我可以看到,這可能是其他職位的副本,但要公平很難在一個關於向量後絆倒具有帶有字符串

+0

如果字符串中的字符數保持不變,則只能使用for循環。但是在迭代字符串的同時刪除字符。 –

+0

當某些字符從字符串中移除時,字符串的大小發生變化,並且索引定位的不僅僅是當前(已刪除)元素的下一個元素,而是緊挨着那個 – zapredelom

回答

0

問題時,它循環通過串彷彿大括號甚至不在那裏,因爲每個右大括號前面都有一個空格。採取一個更簡單的例子:

abc }def 

環路到達i=3,空間,將其刪除,然後前進到i=4,也就是現在的「d」。

你可以通過在刪除一個字符時遞減i來解決這個問題。

+0

哦,我真的想到了這樣的事實:在這個過程中較短的字符串可能會導致問題,但因爲它適用於所有其他字符,我認爲它工作正常。當然,我必須在空間後放置我的測試符號...... – alektron