这是一段代码:
#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
会有什么不同?
答案 0 :(得分:2)
ss >> ch
有什么不同?
ss >> ch
从您的信息流中获取一个字符并将其存储在char ch
变量中。
因此,它会删除字符串中的每个逗号(,
)。
为什么它会在没有
ss >> ch
的情况下停止迭代字符串?
如果没有此操作,您的迭代会因ss >> a
失败而停止,因为它会尝试在a
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;
}
答案 1 :(得分:1)
如果您想保留逗号
,也可以使用此功能#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;
}