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;

我只是重用同一个流对象,但由于某种原因 min 变量没有正确分配。

我错过了什么?

谢谢你。

4

2 回答 2

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 回答
0

原因是,仅调用std::stringstream::str确实会更改内部字符串,但不会重置任何错误标志。因此,当前一个字符串到达​​字符串末尾或另一个“错误”时,流仍然认为它处于此错误。std::striungstream::clear更改字符串后只需调用以清除错误标志。

于 2012-09-30T10:04:53.150 回答