lwx*_*ted 2 c++ iostream stringstream istream
请考虑以下代码:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
ss << string("12");
int h;
ss >> h;
cout << h << endl;
ss.str(string("")); // clear the content of ss
ss << string("30");
int m;
ss >> m;
cout << m << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行上面的代码会产生一些随机输出:
12
0
Run Code Online (Sandbox Code Playgroud)
在某些其他时间,观察到以下输出:
12
4
Run Code Online (Sandbox Code Playgroud)
我期望输出简单:
12
30
Run Code Online (Sandbox Code Playgroud)
为什么我会得到意想不到的结果?
此外,string s在int i没有必要的C++ 11支持的情况下解析一个to 的最佳方法是什么?应该是int i = atoi(s.c_str())吗?
12从流中提取时,到达它的末尾,这会使其处于错误状态.任何进一步的提取都将失败.您需要在ss.clear()清除其内容时调用.
如果您检查了提取的成功,那么您可以避免这个问题.我通常希望从流中看到任何提取作为某种条件.
是的,使用字符串流将字符串解析为整数是在C++ 11之前完成它的一种非常合理的方法.我更喜欢使用它atoi.对于任何想要了解C++ 11方式的人,请使用std :: stoi.