【问题标题】:Stringstream math operations字符串流数学运算
【发布时间】:2020-01-22 15:05:35
【问题描述】:

假设我有一个包含字符串1+2 的字符串流。现在,如果我得到这个字符串流的 int 值,我得到1 作为结果。有没有办法得到3的预期结果?

【问题讨论】:

  • 为什么预期的输出应该是 3?这是一个扫描和解析问题
  • @RoQuOTriX 好吧,我已经写了 1+2,所以如果有办法自动计算这个就好了...
  • 你有ABC+XYZ会一直这样吗?
  • 是的,您有一个包含三个字符“1+2”的字符串。字符串不是计算项。我想,如果你搜索“解析数学字符串”,你会发现一些东西
  • @scohe001 你是什么意思?

标签: c++ string stringstream


【解决方案1】:

不使用标准 C++ 库。表达式解析不是标准 C++ 的一部分。你必须自己写。

【讨论】:

    【解决方案2】:

    当然,您可以创建自己的 result 类型,然后使用自定义提取运算符以您希望的方式从字符串流中读取:

    struct result {
        double val;
        bool err;
        std::string err_val;
    };
    
    std::istringstream& operator>>(std::istringstream &iss, result &r) {
        double lhs, rhs;
        char op;
        //Should probably add some check to make sure this read happens okay...
        iss >> lhs >> op >> rhs; 
    
        if (op == '+') {
            r.val = lhs + rhs;
            r.err = false;
        } else {
            r.err = true;
            r.err_val = "I can only handle addition!";
        }
        return iss;
    }
    
    int main() {
        std::istringstream iss("1+2");
        result res;
        iss >> res;
    
        std::cout << "Result is: " << res.val << std::endl;
    
        return 0;
    }
    

    在这里运行:https://ideone.com/LKAlag

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2011-08-15
      相关资源
      最近更新 更多