首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据类型对字符串流进行标记

根据类型对字符串流进行标记
EN

Stack Overflow用户
提问于 2012-10-07 02:59:18
回答 6查看 1.4K关注 0票数 1

我有一个包含整数和特殊含义字符'#‘的输入流。看起来是这样的:... 12 18 16 # 22 24 26 15 # 17 # 32 35 33 ...标记之间用空格隔开。“#”的位置没有模式。

我试图像这样对输入流进行标记:

代码语言:javascript
运行
复制
int value;
std::ifstream input("data");
if (input.good()) {
  string line;
  while(getline(data, line) != EOF) {
    if (!line.empty()) {
      sstream ss(line);
      while (ss >> value) {
        //process value ...

      }
    }
  }
}

此代码的问题是,当遇到第一个'#‘时,处理会停止。

我能想到的唯一解决方案是将每个单独的标记提取为一个字符串(而不是'#'),并使用atoi()函数将该字符串转换为整数。然而,它的效率非常低,因为大多数标记都是整数。在令牌上调用atoi()会带来很大的开销。

有没有一种方法可以根据令牌的类型来解析单个令牌?也就是说,对于整数,将其解析为整数,而对于'#',则跳过它。谢谢!

EN

Stack Overflow用户

发布于 2012-10-07 03:08:47

就我个人而言,如果您的分隔符始终是空格,而不管后面是什么,我建议您只将输入作为字符串并从那里进行解析。这样,你就可以获取字符串,看看它是数字还是#之类的东西。

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12762865

复制
相关文章

相似问题

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