【问题标题】:Extraction operator into non-numeric character将运算符提取为非数字字符
【发布时间】:2019-02-26 15:41:14
【问题描述】:

给定一个istringstream,是否可以将其内容“提取”为一个字符只有当要提取的字符是非数字的(即不是0-9)?

比如这个

string foo = "+ 2 3";
istringstream iss(foo);

char c;
iss >> skipws >> c;  //Do this only if c would be non-numeric

应该提取'+',但如果foo"2 + 3",它不应该提取任何东西,因为第一个[非空白]字符是'2'数字.

为了给出一些上下文,我需要这个来制作递归的“普通波兰符号”(即前缀符号)解析器。

【问题讨论】:

    标签: c++ istringstream


    【解决方案1】:

    如果是数字字符,您可以使用unget 放回字符。

    string foo = "+ 2 3";
    istringstream iss(foo);
    
    char c;
    iss >> skipws >> c;
    if (std::isdigit(c)) iss.unget();
    

    【讨论】:

    • 我实际上比我更喜欢这个答案,因为它简化了空白处理。
    【解决方案2】:

    您可以使用istream::peek 在提取之前检查下一个字符是什么。您可以根据您的可接受范围测试peek 的结果,如果匹配,则进行实际提取。

    顺便说一句,如果您想跳过空格,您还需要检查并使用peek() 处理它(通过提取和丢弃空格字符)。即使使用skipwspeek() 也不会越过空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多