一、计算器实现的思路
在计算器的实现中,需要将用户输入的算式转换成计算机可以识别和处理的形式,然后进行计算并输出结果。
第一步是将用户输入的中缀表达式转换成后缀表达式,这样方便计算机进行计算。在转换中,需要注意运算符的优先级。
第二步是将转换后的后缀表达式利用栈进行计算,遇到操作数则压入栈中,遇到运算符则出栈两个操作数进行运算,并将运算结果压入栈中。
第三步是将栈中最后一个元素即为计算结果,将其输出给用户。
二、中缀转后缀的实现
中缀表达式转后缀表达式可以使用栈来实现,在将运算符压入栈中前需要弹出优先级比它高或相等的运算符。
vector infix2postfix(vector infix){
stack s;
vector postfix;
map priority;
priority["+"] = 1;
priority["-"] = 1;
priority["*"] = 2;
priority["/"] = 2;
priority["("] = 0;
for(int i=0;i=priority[token]){
postfix.push_back(s.top());
s.pop();
}
s.push(token);
}
}
while(!s.empty()){
postfix.push_back(s.top());
s.pop();
}
return postfix;
}
三、后缀表达式的计算实现
后缀表达式的计算可以使用栈来实现,在遇到操作数时将其压入栈中,在遇到运算符时弹出栈顶的两个元素进行计算,将结果再次压入栈中。
int eval_postfix(vector postfix){
stack s;
for(int i=0;i<postfix.size();i++){
string token = postfix[i];
if(isdigit(token[0])){
s.push(stoi(token));
}
else{
int b = s.top();
s.pop();
int a = s.top();
s.pop();
if(token=="+"){
s.push(a+b);
}
else if(token=="-"){
s.push(a-b);
}
else if(token=="*"){
s.push(a*b);
}
else{
s.push(a/b);
}
}
}
return s.top();
}
四、完整代码示例
#include #include #include
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/297149.html
微信扫一扫
支付宝扫一扫