【发布时间】:2014-02-04 14:54:35
【问题描述】:
当我尝试从字符串中解析以空格分隔的双精度值时,我发现了这种奇怪的行为,即字符串是以循环方式读取的。
这是程序:
stringstream ss;
string s("1 2 3 4");
double t;
list<double> lis;
for(int j=0; j!=10; ++j){
ss << s;
ss >> t;
lis.push_back(t);
}
for(auto e : lis){
cout << e << " ";
}
这里是输出:
1 2 3 41 2 3 41 2 3 41
如果我将尾随空格附加为s= "1 2 3 4 ";,我会得到
1 2 3 4 1 2 3 4 1 2
现在的问题:
1) 如果我不知道字符串 s 中有多少条目,如何将所有条目读入列表 l?
2)我实际上是在调用哪个operator<<ss << s;?是否指定循环读取?
3)我可以以更好的方式进行解析吗?
已经谢谢了!
这是固定代码(感谢timrau):
// declarations as before
ss << s;
while(ss >> t){
lis.push_back(t);
}
// output as before
这会产生:
1 2 3 4
根据需要。 (在处理下一个输入之前,不要忘记通过ss.clear() 清除您的stringstream。;))
HeywoodFloyd 的另一条有用评论:也可以使用 boost/tokenizer 来“拆分”字符串,参见 this post
【问题讨论】:
-
您无需将
s多次放入流中。将ss << s;移到循环之外。
标签: c++ string stringstream