我想处理大数的基本运算(+,-,*,/)。我的标准输入行看起来像12345678987654322+12334675432142654765786
。
因此,我想先将数字读入一个字符串变量,然后将操作符号读入另一个变量,然后继续读取直到行尾。
我当时正在考虑这样的事情,但是它只是跳过了“ +”,我不知道如何在此处包括4个条件(+,-,*,/)。
std::string firstNumber;
std::string secondNumber;
std::getline(std::cin, firstNumber, '+');
std::getline(std::cin, secondNumber);
答案 0 :(得分:1)
将整行读取为字符串。
环绕字符串并逐个字符地提取。只要字符是数字,就将其放入第一个“数字”变量中。如果它是非数字,则检查它是否是有效的运算符,如果不是,则报告失败。将第二个数字逐个字符地提取到第二个“数字”变量中。
这样,您可以更轻松地检测错误,并处理数字和运算符之间的空格。
您可以(我建议您这样做)将数字提取功能放到一个单独的函数中,这样就不必为它重复代码了。
答案 1 :(得分:0)
您需要做一些工作,而不是依靠标准功能为您完成工作。一次读取一个字符并使用几个循环就可以轻松实现所需的内容
#include <cctype>
#include <string>
#include <iostream>
std::string firstNumber, secondNumber;
char operation, ch;
ch = std::cin.get();
while (isdigit((unsigned char)ch))
{
firstNumber += ch;
ch = std::cin.get();
}
operation = std::cin.get();
ch = std::cin.get();
while (isdigit((unsigned char)ch))
{
secondNumber += ch;
ch = std::cin.get();
}
此代码完全不执行错误检查,这在现实世界中的程序中将是一个严重的问题。
您被要求做的是一个解析问题。这是很常见的事情,并且有很多关于不同解析方式的文献。