首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sstream迭代字符串

用sstream迭代字符串
EN

Stack Overflow用户
提问于 2018-04-03 08:57:36
回答 2查看 50关注 0票数 1

下面是一段代码:

代码语言:javascript
复制
#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;
}

它产生的输出:

代码语言:javascript
复制
2
3
55
33
1124
34

但是,如果删除行ss >> ch,它将生成输出:2

为什么它停止遍历字符串?ss >> ch有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 08:59:46

ss >> ch有什么不同?

ss >> ch从流中获取一个字符,并将其存储在char ch变量中。

因此,这里它从字符串. (**,**)中删除了每个逗号。

为什么它在没有ss >> ch的情况下停止遍历字符串?

如果没有此操作,您的迭代就会停止,因为ss >> a 失败了,因为它试图在 a**,an** int 变量.中存储一个逗号。

注意:如果用空格替换逗号,就可以去掉ss >> ch,因为空格被识别为分隔符。

示例:

代码语言:javascript
复制
#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;
}
票数 2
EN

Stack Overflow用户

发布于 2018-04-03 09:16:29

如果您想保留逗号,也可以使用这个

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49625992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档