3.可含括号的算术表达式的求值
笔记
语言:C++.
简介
文件名:
calculator.h
这是一个可以计算字符串类型四则运算的函数。它将输入的字符串转换为一个中缀表达式并计算结果。
使用方法
在代码中调用该函数,传入一个NumberType类型的变量和一个代表需要计算的字符串类型四则运算表达式的string类型变量。
如果输入合法,则操作数栈顶为结果,计算结果会存入传入的NumberType类型变量中。
实现过程
该函数的实现过程可以分为以下几个步骤:
步骤 1:初始化
在该步骤中,程序会初始化运算符优先级列表和待处理数组。同时,程序会将左括号入栈,避免后续处理中栈为空的情况。
步骤 2:逐一处理字符串中的字符
在该步骤中,程序会逐一处理字符串中的字符。
-
如果是数字字符,则程序会将整个数字部分录入操作数栈中。
-
如果是左括号,则直接入运算符栈中。
-
如果是右括号,则将栈中的运算符和操作数出栈,直到遇到左括号,并将化简后的结果入操作数栈中。
-
如果是运算符,则判断其与栈顶运算符的优先级,如果更高则入栈,否则将栈中的运算符和操作数出栈,直到栈顶运算符优先级低于当前运算符,并将化简后的结果入操作数栈中。
-
如果读到非法字符,则返回错误信息。
步骤 3:计算最终结果
在该步骤中,程序会计算操作数栈中最终的结果。
- 如果操作数栈中只有一个元素,则计算结果成功,否则说明输入不合法。
题面
【问题描述】
请使用栈实现可含括号的算术表达式(加、减、乘、除)的求值(注意:运算数可为十进制的整数,该整数可为负数)
【输入形式】
输入一个字符串,以’#'结束
【输出形式】
如果输入正确,则输出一个整型数;否则输出"error!"
【样例输入】
123+45*(67-7)-8/9
【样例输出】
2823