ALL, 这是我的代码:
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变量。
我错过了什么?
谢谢。
答案 0 :(得分: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;
答案 1 :(得分:0)
原因是,只调用std::stringstream::str
确实会更改内部字符串,但它不会重置任何错误标志。因此,当前一个字符串到达字符串的末尾或另一个“错误”时,流仍然认为它是在这个错误。只需在更改字符串后调用std::striungstream::clear
清除错误标志。