【问题标题】:C++ separate input into various variablesC ++将输入分离到各种变量中
【发布时间】:2023-04-11 12:40:01
【问题描述】:

将控制台输入(或字符串)分成两个 int 变量的优雅方法是什么?

输入格式:a - bx

  • a、b 始终为整数。
  • x 可以忽略。

结果:

int1 = a; 
int2 = -b;

任何提示表示赞赏。

【问题讨论】:

标签: c++ string parsing tokenize


【解决方案1】:

假设完全是所述的形式:

int a, b;
std::string op;
std::cin >> a >> op >> b;
if (op == "-") b = -b;

请注意,这并不可靠。它会将- 以外的任何内容视为加分项,并且绝对可以识别任何以一对数字开头的输入,这些数字由一团非空格分隔。

【讨论】:

  • 那就不行了。如果您想要一个更强大的解决方案,您需要构建一个小型解析器。
【解决方案2】:

将字符串标记并解析为数学方程式。

【讨论】:

    【解决方案3】:

    这里使用 C++11 和 AX 是一个可能的解析器:

    #include <axe.h>
    #include <iostream>
    
    template<class I>
    void example(I i1, I i2)
    {
        int a, b;
        auto space = axe::r_lit(' ');
        auto rule = axe::r_udecimal(a) & *space & axe::r_decimal(b);
        (rule >> axe::e_ref([&](...) 
        { std::cout << "\na=" << a << ",b=" << b; }))
        (i1, i2);
    }
    
    int main()
    {
        std::string str = "100 - 10i";
        example(str.begin(), str.end());
    }
    

    附:注意上面代码中的错误:我只是证明它是正确的,没有尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多