-1

cocos2dx で C++ 文字列関数を使用しています。次の文字列 CorrectAns = "below" があります。

for(int i = 0; i<CorrectAns.size();i++)
{
      CorrectAns.replace(i,i,"?");
}

この関数は、文字列を "?????" として返す必要がありますが、4 文字、つまり "????" しか返しません。

このように書くと、

for(int i = 0; i<CorrectAns.size();i++)
{
if(i == 0)
    {
      CorrectAns.replace(i,i,"?");
    }
}

クラッシュするだけです。「CorrectAns.replace(i,i+1,"?");」と書いた場合にのみ正常に動作します。

関数がこのように機能するのはなぜですか?? 誰でも私を助けてもらえますか??

4

1 に答える 1

4
string& replace ( size_t pos1, size_t n1,   const string& str );

パラメーター pos1 および n1 を持つバージョンの場合、置き換えられるセクションは文字位置 pos1 から始まり、文字列内の n1 文字にまたがります。

だからあなたは使うべきです

for(int i = 0; i<CorrectAns.size();i++)
{
      CorrectAns.replace(i,1,"?");
}

Mb 次のようなものを使用すると、より便利になります

CorrectAns.assign(CorrectAns.size(), '?');
于 2012-07-20T05:31:57.090 に答える