Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从标准输入中读取文本,直到符合其中一个精确字符,保存它,然后继续读取,直到行尾_C++ - Fatal编程技术网

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();
}