【发布时间】:2023-04-11 12:40:01
【问题描述】:
将控制台输入(或字符串)分成两个 int 变量的优雅方法是什么?
输入格式:a - bx
- a、b 始终为整数。
- x 可以忽略。
结果:
int1 = a;
int2 = -b;
任何提示表示赞赏。
【问题讨论】:
标签: c++ string parsing tokenize
将控制台输入(或字符串)分成两个 int 变量的优雅方法是什么?
输入格式:a - bx
结果:
int1 = a;
int2 = -b;
任何提示表示赞赏。
【问题讨论】:
标签: c++ string parsing tokenize
假设完全是所述的形式:
int a, b;
std::string op;
std::cin >> a >> op >> b;
if (op == "-") b = -b;
请注意,这并不可靠。它会将- 以外的任何内容视为加分项,并且绝对可以识别任何以一对数字开头的输入,这些数字由一团非空格分隔。
【讨论】:
将字符串标记并解析为数学方程式。
【讨论】:
这里使用 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());
}
附:注意上面代码中的错误:我只是证明它是正确的,没有尝试过。
【讨论】: