1.定义两个栈,一个操作符(operator)栈,一个操作数(operand)栈。
2.判断表达式是否合法,合法进入3,否则进入4。
①字符合法性检验,每个字符必须是算术表达式中要求的字符;
②括号匹配检验,包括个数是否匹配,以及位置是否正确合法。
"("前不能有操作数,后不能有操作符;")"前不能有操作符,后不能有操作数。
③小数点合法性检验,其前其后都要有数字。
④操作符合法性检验,操作符两边要有操作数。
⑤区分"-"是操作数中的负号还是操作符中的减号。
3.解析表达式并运算。
①遇到操作符确定不是负号,从上一个操作符位置开始截取字符串,把结果转换成double型数据,放入操作数栈;
②遇到操作符。
如果是"+-",从操作数栈中取出两个操作数,从操作符栈中取出一个操作符做运算,把运算的结果放入操作数栈中,同时把当前遇到的操作符放入操作符栈中。
如果是"*/",判断操作符中的最后一个操作符,如果是"*/",从操作数栈中取出两个操作数,从操作符栈中取出一个操作符做运算,把运算的结果放入操作数栈中,同时把当前遇到的操作符放入操作符栈中;如果是"+-",把当前操作符放入操作符栈中。
③对于一个含有括号的算术表达式,只需从最内层括号部分开始次做②的运算,直到操作符栈空结束。
4.得到结果信息,处理完毕。