gpt4 book ai didi

c++ - 如何在反向抛光计算器中添加多位整数

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:11 25 4
gpt4 key购买 nike

    // FILE: calc.h
#include <iostream>
#include <stack> // Uses STL
#include <string> // Uses STL
using namespace std;

void evaluate_stack_tops(stack<double> & numbers, stack<char> & operations);

double read_and_evaluate(string line)
{
const char RIGHT_PARENTHESIS = ')';
stack<double> numbers; // local stack object
stack<char> operations; // local stack object
double number;
char symbol;
size_t position = 0;
while (position < line.length())
{

if (isdigit(line[position]))
{
number = line[position++] - '0'; // get value
numbers.push(number);
}
else if (strchr("+-*/", line[position]) != NULL)
{
symbol = line[position++];
operations.push(symbol);
}
else if (line[position] == RIGHT_PARENTHESIS)
{
position++;
evaluate_stack_tops(numbers, operations);
}
else
position++;
}
if (!operations.empty())
evaluate_stack_tops(numbers, operations);
return numbers.top();
}

void evaluate_stack_tops(stack<double> & numbers, stack<char> & operations)
{
double operand1, operand2;
operand2 = numbers.top();
numbers.pop();
operand1 = numbers.top();
numbers.pop();
switch (operations.top())
{
case '+': numbers.push(operand1 + operand2); break;
case '-': numbers.push(operand1 - operand2); break;
case '*': numbers.push(operand1 * operand2); break;
case '/': numbers.push(operand1 / operand2); break;
}
operations.pop();
}


// FILE: Use_Stack.cpp
#include <iostream>
using namespace std;
#include "calc.h"

int main()
{
double answer;
string line;
cout << "Type a fully parenthesized arithmetic expression (SINGLE DIGITS ONLY!):\n";
getline(cin, line);
answer = read_and_evaluate(line);
cout << "That evaluates to " << answer << endl;
system("pause");
return 0;
}

一切正常,我可以输入诸如“2 4 3 * + 7 – 2 +”之类的简单内容,但如果我想输入诸如“123 60 +”之类的内容,则无法正常工作。我把它分成两个头文件。有人可以提示我如何接受多位数整数吗?

最佳答案

解决该问题的一种方法是找到一个数字,而不是假设它只有一个数字长,而是使用一个循环来收集该数字的所有其他数字。当遇到非数字或空格时,循环将终止。

更好的方法是使用 stringstream 标记输入字符串。在这种情况下,您可以将整行输入放入一个字符串中,然后使用类似于以下内容的 while 循环:

stringstream ss(line);
string token;
while (ss >> token) {
// do stuff with token
}

关于c++ - 如何在反向抛光计算器中添加多位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26332634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com