Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ For循环覆盖字符串忽略字符_C++_String_Loops - Fatal编程技术网

C++ For循环覆盖字符串忽略字符

C++ For循环覆盖字符串忽略字符,c++,string,loops,C++,String,Loops,因此,我有一个简单的JSON字符串,我正在使用for循环进行迭代(不要问我为什么不使用JSON解析器)。 在这个循环中,我想踢出{,}和“” (由于调试原因,放错位置的}就在那里) 代码如下: std::string str("{'pi': 3.141, 'happy': }true }"); for (int i = 0; i < str.length(); i++) { char temp = str[i]; if (temp == '{' || temp == '}'

因此,我有一个简单的JSON字符串,我正在使用for循环进行迭代(不要问我为什么不使用JSON解析器)。 在这个循环中,我想踢出
{
}
和“
” (由于调试原因,放错位置的
}
就在那里) 代码如下:

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);
}
std::string str(“{'pi':3.141,'happy':}true}”);
对于(int i=0;i
不是很复杂,基本上工作正常,但由于某种原因,
}
被跳过。它只是在字符串中迭代,就像它根本不存在一样。有人能复制这种行为吗?我完全不知道这里会出什么问题

编辑:
好的,我可以看出这可能是另一篇文章的重复,但公平地说,当字符串出现问题时,很难偶然发现一篇关于向量的文章,因为每个右大括号前面都有一个空格,所以它在字符串中迭代,就好像大括号不在那里一样。举一个简单的例子:

abc }def
循环到达空间
i=3
,删除它,然后进入
i=4
,现在是“d”


擦除字符时,可以通过递减
i
来解决此问题。

只有在字符串中的字符数保持不变时,才能使用for循环。但您在遍历字符串时正在删除字符。当从字符串中删除某些字符时,字符串的大小将发生更改,索引位置不仅是当前(已删除)元素的下一个元素,而且是该元素旁边的哦,我的。。。我实际上考虑过这样一个事实,即在这个过程中缩短字符串可能会导致问题,但由于它适用于所有其他字符,我认为它可以正常工作。当然,我也必须在空格后加上我的测试符号。。。