0

文字列を反復処理し、初期キー値と情報チャンクの終わりを識別するキー値に基づいて情報チャンクをコピーしようとしています。ただし、初期値と最終値を減算して、探しているチャンクの長さを見つけようとすると、一見任意の値を受け取ります。

したがって、開始と終了のインデックスは次のように検出されます。

currentstringlocation = mystring.find("value_im_looking_to_start_at, 0);
endlocation = mystring.find("value_im_looking_to_stop_at", currentstringlocation);

次に、次のようなことをしようとしています。

mystring.copy(newstring,(endlocation-currentlocation), currentlocation);

しかし、これは私が望む結果を私に与えていません。これが私のコードからの抜粋とそれが生み出す出力です。

stringlocation2=topoinfo.find("\n",stringlocation+11);
topoinfo.copy(address,(stringlocation2-stringlocation+11),stringlocation+11);
cout << (stringlocation2-stringlocation+11) << "\n";
cout << stringlocation2 << "\t" << stringlocation+11 << "\n";

出力:25 59 56

つまり、キャプチャしようとしている情報のチャンクは3文字にまたがっていますが、2文字を引くと、25文字になります。なぜこれが発生するのか、どのように回避できるのか、誰かに説明してもらえますか?

4

2 に答える 2

3

長さの計算が間違っています。代わりに次のようなものを試してください。

topoinfo.copy(address, stringlocation2 - (stringlocaion + 11),
              stringlocation + 11);

この後address、コピーされた文字列が含まれます。ただしaddress、 が文字配列または文字ポインタの場合は、終了文字を自分で追加する必要があります。'\0'

部分文字列を取得するためのより良い解決策は、実際にstd::string::substr関数を使用することです。

std::string address = topoinfo.substr(stringlocation + 11,
                                      stringlocation2 - (stringlocaion + 11));
于 2012-07-29T14:56:01.177 に答える
1

する必要があります

topoinfo.copy(address,stringlocation2-(stringlocation+11),stringlocation+11);
cout << stringlocation2-(stringlocation+11) << "\n";

ブラケットを間違えました。

于 2012-07-29T14:44:06.813 に答える