2017-06-12 201 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