使用sstream迭代字符串

时间:2018-04-03 08:57:37

标签: c++ stream stringstream

这是一段代码:

#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会有什么不同?

2 个答案:

答案 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;
}