C++ 从标准输入中读取文本,直到符合其中一个精确字符,保存它,然后继续读取,直到行尾
我想处理大数的基本运算(+、-、*、/)。我的标准输入行看起来像C++ 从标准输入中读取文本,直到符合其中一个精确字符,保存它,然后继续读取,直到行尾,c++,C++,我想处理大数的基本运算(+、-、*、/)。我的标准输入行看起来像123456789876544322+12334675432142654765786。 所以我想把第一个数字读入一个字符串变量,然后把运算符号读入另一个变量,然后继续读入,直到行尾 我在考虑这样的事情,但它只是跳过了“+”,我不知道如何在这里包括4个条件(+、-、*、/) 把整行读成一个字符串 循环字符串并逐个字符提取。只要字符是数字,就将其放入第一个“number”变量中。如果是非数字,则检查它是否是有效的运算符,如果不是,则报告
123456789876544322+12334675432142654765786
。
所以我想把第一个数字读入一个字符串变量,然后把运算符号读入另一个变量,然后继续读入,直到行尾
我在考虑这样的事情,但它只是跳过了“+”,我不知道如何在这里包括4个条件(+、-、*、/)
把整行读成一个字符串 循环字符串并逐个字符提取。只要字符是数字,就将其放入第一个“number”变量中。如果是非数字,则检查它是否是有效的运算符,如果不是,则报告失败。将第二个数字逐个字符提取到第二个“number”变量中 这样可以更容易地检测错误,并处理数字和运算符之间的空格
您可以(我建议您这样做)将数字提取放在一个单独的函数中,这样您就不必为它复制代码。您需要做一些工作,而不是依赖标准函数来完成这项工作。通过一次读取一个字符并使用几个循环,您可以轻松完成所需的操作
#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();
}
#包括
#包括
#包括
std::字符串firstNumber,secondNumber;
字符操作,ch;
ch=std::cin.get();
while(isdigit((无符号字符)ch))
{
firstNumber+=ch;
ch=std::cin.get();
}
operation=std::cin.get();
ch=std::cin.get();
while(isdigit((无符号字符)ch))
{
第二个数+=ch;
ch=std::cin.get();
}
这段代码根本不进行错误检查,这在现实世界的程序中是一个严重的问题
要求您做的是一个解析问题。这是一件非常常见的事情,有很多关于不同解析方法的文献
#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();
}