使用c++编写程序二、功能要求: 1.从键盘输入一段表达式(字符串),其中含有整数、加、减、乘、除。 2.计算表达式的值。 3.事先约定表达式无括号、无浮点数、无负数、无错误。
时间: 2023-08-04 16:08:20 浏览: 80
好的,我可以帮你解决这个问题。以下是一个简单的C++程序,可以实现你的要求:
```c++
#include <iostream>
#include <string>
#include <stack>
#include <cstdlib>
using namespace std;
int main()
{
string expression;
getline(cin, expression);
stack<int> numbers;
stack<char> operators;
for (int i = 0; i < expression.length(); i++)
{
if (expression[i] >= '0' && expression[i] <= '9')
{
int number = 0;
while (expression[i] >= '0' && expression[i] <= '9')
{
number = number * 10 + (expression[i] - '0');
i++;
}
i--;
numbers.push(number);
}
else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/')
{
if (operators.empty() || operators.top() == '+' || operators.top() == '-' || (expression[i] == '*' || expression[i] == '/') && (operators.top() == '*' || operators.top() == '/'))
{
operators.push(expression[i]);
}
else
{
int number2 = numbers.top();
numbers.pop();
int number1 = numbers.top();
numbers.pop();
char op = operators.top();
operators.pop();
int result;
switch (op)
{
case '+': result = number1 + number2; break;
case '-': result = number1 - number2; break;
case '*': result = number1 * number2; break;
case '/': result = number1 / number2; break;
}
numbers.push(result);
i--;
}
}
}
while (!operators.empty())
{
int number2 = numbers.top();
numbers.pop();
int number1 = numbers.top();
numbers.pop();
char op = operators.top();
operators.pop();
int result;
switch (op)
{
case '+': result = number1 + number2; break;
case '-': result = number1 - number2; break;
case '*': result = number1 * number2; break;
case '/': result = number1 / number2; break;
}
numbers.push(result);
}
cout << numbers.top() << endl;
return 0;
}
```
这个程序使用了两个栈,一个用于存储数字,一个用于存储运算符。程序首先从键盘读取表达式,并对表达式进行扫描。如果当前字符是数字,则将数字读取出来,并将其压入数字栈中。如果当前字符是运算符,则将其与运算符栈顶的运算符比较,如果当前运算符的优先级更高,则将其压入运算符栈中。否则,从数字栈中弹出两个数字,从运算符栈中弹出一个运算符,进行运算,并将结果压入数字栈中。最后,当表达式扫描完毕后,依次弹出运算符栈中的运算符,并进行运算,直到运算符栈为空。
需要注意的是,这个程序假设表达式无括号、无浮点数、无负数、无错误。如果表达式中包含这些内容,则需要进行相应的修改。
阅读全文