如何从没有运算符>>的字符串流中返回下一个标记?

约翰·特里

你如何获得一个std::stringstream返回,而不是提取它与一个变量的下一个标记,operator>>

我在下面列出了一些我为什么要这样做的例子。我试过get(),但这只是返回下一个字符。

#include <string>
#include <sstream>

std::string line("abc xyz");
std::stringstring ss(line);

std::string token;
ss >> token;                   // I don't want this
token = ss.next();             // I want something like this

if (ss.next() == "abc")        // So I can do something like this
int x = std::stoi(ss.next());  // Or this

这样做的主要原因是当我不想存储或重用下一个令牌时生成更清晰的代码。否则,代码将填充 lines ss >> token

本杰明·林德利

写一个函数。

template<typename T = std::string>
T next(std::istream& is) {
    T value;
    if (is >> value)
        return value;
    else
        throw an_exception_or_something;
}

然后你可以这样做:

if (next<>(ss) == "abc")
    do_something();
int x = next<int>(ss);   // note: no need for stoi

或者,返回 a std::optional,如果您的实现支持它。

template<typename T = std::string>
std::optional<T> next(std::istream& is) {
    T value;
    if (is >> value)
        return value;
    else
        return std::nullopt;
}

然后,您可以决定如何处理呼叫站点的故障。

int x = *next<int>(ss);            // undefined behavior on error
int y = next<int>(ss).value();     // throws exception on error
int z = next<int>(ss).value_or(0); // return a default value on error

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从没有索引的列中获取数据

来自分类Dev

如何从没有ID的表中获取行

来自分类Dev

如何查找字符串的下一个标记

来自分类Dev

如何从没有命令提示符的文件中删除“系统文件”属性?

来自分类Dev

如何从没有构造函数的另一个类中调用方法

来自分类Dev

如何用下一个替换字符串中的字符?

来自分类Dev

如何从没有属性的XML文件中获取节点并放入字符串列表

来自分类Dev

如何从没有匹配项的glob模式中静默获取空字符串

来自分类Dev

如何从没有标签的HTML字符串中获取数字?

来自分类Dev

如何从没有4个字符串中的任何一个的文件行中提取?

来自分类Dev

如何从没有逗号且键中没有值的字典中提取记录

来自分类Dev

如何获得字符串中的下一个单词?

来自分类Dev

如何从没有特定名称的JSONObject获取字符串

来自分类Dev

如何从没有任何连接的两个不同表中获取值

来自分类Dev

如何从没有访问权限的脚本中的div中删除javascript / jquery悬停事件?

来自分类Dev

如何从没有键的 JSON 数组中的数组中读取值?

来自分类Dev

从没有联合的条件组中返回多行

来自分类Dev

如何替换字符串中的特定字符以及紧接的下一个字符

来自分类Dev

如何从没有键的表中检索非重复记录?

来自分类Dev

如何从没有任何模块的节点js中的JWT中提取信息?

来自分类Dev

如何从没有附加内容URL的下载按钮中获取或卷曲?

来自分类Dev

如何从没有包含数据的文本文件中读取?

来自分类Dev

如何从没有硬件菜单按钮的设备中删除DownActionBar?

来自分类Dev

如何从没有空列的.dat文件中获取数据

来自分类Dev

Webcrawler BeautifulSoup-如何从没有类标签的链接中获取标题

来自分类Dev

如何从没有Auth::()的数据库中获取userId?

来自分类Dev

如何从没有键的表中检索非重复记录?

来自分类Dev

如何从没有匹配列的表中获取数据?

来自分类Dev

如何从没有清理它们的脚本中杀死作业

Related 相关文章

  1. 1

    如何从没有索引的列中获取数据

  2. 2

    如何从没有ID的表中获取行

  3. 3

    如何查找字符串的下一个标记

  4. 4

    如何从没有命令提示符的文件中删除“系统文件”属性?

  5. 5

    如何从没有构造函数的另一个类中调用方法

  6. 6

    如何用下一个替换字符串中的字符?

  7. 7

    如何从没有属性的XML文件中获取节点并放入字符串列表

  8. 8

    如何从没有匹配项的glob模式中静默获取空字符串

  9. 9

    如何从没有标签的HTML字符串中获取数字?

  10. 10

    如何从没有4个字符串中的任何一个的文件行中提取?

  11. 11

    如何从没有逗号且键中没有值的字典中提取记录

  12. 12

    如何获得字符串中的下一个单词?

  13. 13

    如何从没有特定名称的JSONObject获取字符串

  14. 14

    如何从没有任何连接的两个不同表中获取值

  15. 15

    如何从没有访问权限的脚本中的div中删除javascript / jquery悬停事件?

  16. 16

    如何从没有键的 JSON 数组中的数组中读取值?

  17. 17

    从没有联合的条件组中返回多行

  18. 18

    如何替换字符串中的特定字符以及紧接的下一个字符

  19. 19

    如何从没有键的表中检索非重复记录?

  20. 20

    如何从没有任何模块的节点js中的JWT中提取信息?

  21. 21

    如何从没有附加内容URL的下载按钮中获取或卷曲?

  22. 22

    如何从没有包含数据的文本文件中读取?

  23. 23

    如何从没有硬件菜单按钮的设备中删除DownActionBar?

  24. 24

    如何从没有空列的.dat文件中获取数据

  25. 25

    Webcrawler BeautifulSoup-如何从没有类标签的链接中获取标题

  26. 26

    如何从没有Auth::()的数据库中获取userId?

  27. 27

    如何从没有键的表中检索非重复记录?

  28. 28

    如何从没有匹配列的表中获取数据?

  29. 29

    如何从没有清理它们的脚本中杀死作业

热门标签

归档