2017-06-12 5 views
-1

私はforループを繰り返しているシンプルなJSON文字列を持っています(どうして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); 
} 

非常に複雑で、それは基本的にだけで正常に動作しません何らかの理由で}がスキップされます。それは、たとえそこにいなくても、文字列を反復するだけです。誰でもこの動作を再現できますか?私はここで間違っているかもしれないアイデアから完全に外れています。

はEDIT:文字列

+0

文字列内の文字数が同じである場合にのみforループを使用できます。しかし、文字列を反復しながら文字を削除しています。 –

+0

文字列からいくつかの文字列が削除され、文字列のサイズが変更され、現在の(削除された)要素の次の要素だけでなく、その隣にインデックスが配置されます – zapredelom

答えて

0

に問題がとき は、[OK]を、私はこれが他のポストの重複かもしれないが、それはベクトルについての記事つまずくのは難しい公正であることをどのように見ることができますこれは、文字列を反復処理しましたあたかも中括弧があってもそうでないかのように、それぞれの閉じ括弧の前にスペースがあるためです。単純な例を見てみましょう:

abc }def 

ループは「D」今ある、i=4に進み、その後、i=3、スペース、それを削除します達します。

これを修正するには、文字を消去するときにiを減らします。

+0

ああ私は実際に問題の原因になる可能性がありますが、それ以外の文字については問題なく動作しますので、正常に動作すると見なしました。もちろん、私はスペースの後にも私のテストシンボルを置く必要があった... – alektron

関連する問題