下面是一段代码:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
string st = "2,3,55,33,1124,34";
int a;
char ch;
ss.str(st);
while(ss >> a)
{
cout << a << endl;
ss >> ch;
}
return 0;
}它产生的输出:
2
3
55
33
1124
34但是,如果删除行ss >> ch,它将生成输出:2。
为什么它停止遍历字符串?ss >> ch有什么不同?
发布于 2018-04-03 08:59:46
ss >> ch有什么不同?
ss >> ch从流中获取一个字符,并将其存储在char ch变量中。
因此,这里它从字符串. (**,**)中删除了每个逗号。
为什么它在没有
ss >> ch的情况下停止遍历字符串?
如果没有此操作,您的迭代就会停止,因为ss >> a 失败了,因为它试图在 a**,an** int 变量.中存储一个逗号。
注意:如果用空格替换逗号,就可以去掉ss >> ch,因为空格被识别为分隔符。
示例:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
string st = "2 3 55 33 1124 34";
int a;
ss.str(st);
while (ss >> a)
cout << a << endl;
return 0;
}发布于 2018-04-03 09:16:29
如果您想保留逗号,也可以使用这个
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
string st = "2,3,55,33,1124,34";
std::string token;
ss.str(st);
while(getline(ss, token, ',')) {
cout << token << endl;
}
return 0;
}https://stackoverflow.com/questions/49625992
复制相似问题