0

すべて、これが私のコードです:

std::string version = curl_version();
version = version.substr( version.find( '/' ) + 1 );
int min, max;
int pos = version.find( '.' );
std::stringstream stream( version.substr( 0, pos ) );
version = version.substr( pos + 1 );
stream >> max;
pos = version.find( '.' );
stream.str( version.substr( 0, pos ) );
stream >> min;

同じストリーム オブジェクトを再利用していますが、何らかの理由で最小変数が適切に割り当てられていません。

私は何が欠けていますか?

ありがとうございました。

4

2 に答える 2

0

その理由は、呼び出すだけでstd::stringstream::str内部文字列が変更されますが、エラー フラグはリセットされないためです。したがって、前の文字列が文字列の末尾または別の「エラー」に達した場合、ストリームはまだこのエラーにあると見なします。文字列を変更した後、呼び出しstd::striungstream::clearてエラー フラグをクリアするだけです。

于 2012-09-30T10:04:53.150 に答える
0

問題は、同じ stringstream オブジェクトを再利用できないことです。代わりに次のようにしてみてください。

std::string version = curl_version();
version = version.substr( version.find( '/' ) + 1 );
int min, max;
int pos = version.find( '.' );
std::stringstream stream( version.substr( 0, pos ) );
version = version.substr( pos + 1 );
stream >> max;
pos = version.find( '.' );
std::stringstream stream1( version.substr( 0, pos ) );
stream1 >> min;

文字列ストリームからシフト (>>) して eof (stream.eof() を呼び出すことで確認できます) に達すると、(str() を呼び出すことによって) 設定してもそれ以上シフトアウトできないようにするフラグが設定されているようです。関連付けられた新しい文字列オブジェクト。これを機能させるには、再度シフトアウトする前に clear() を呼び出す必要があります。

std::string version = curl_version();
version = version.substr( version.find( '/' ) + 1 );
int min, max;
int pos = version.find( '.' );
std::stringstream stream( version.substr( 0, pos ) );
version = version.substr( pos + 1 );
stream >> max;
pos = version.find( '.' );
stream.str( version.substr( 0, pos ) );
str.clear();
stream >> min;
于 2012-09-30T05:57:20.400 に答える