如何轻松实现一个基础计算器功能?

2026-04-29 12:363阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计776个文字,预计阅读时间需要4分钟。

如何轻松实现一个基础计算器功能?

C++实现简单计算器的整体代码,供大家参考,具体内容如下:

cpp#include #include #include #include

using namespace std;

double calculate(const string& expression);

int main() { string expression; cout << 请输入包含+ * /的非负整数表达式: <

double calculate(const string& expression) { stack values; stack ops;

for (size_t i=0; i

while (!ops.empty()) { double val2=values.top(); values.pop(); double val1=values.top(); values.pop(); char op=ops.top(); ops.pop(); values.push(apply_op(val1, val2, op)); }

return values.top();}

bool has_precedence(char op1, char op2) { if (op2=='(' || op2==')') { return false; } if ((op1=='*' || op1=='/') && (op2=='+' || op2=='-')) { return false; } return true;}

double apply_op(double val1, double val2, char op) { switch (op) { case '+': return val1 + val2; case '-': return val1 - val2; case '*': return val1 * val2; case '/': return val1 / val2; default: throw Invalid operator; }}

C++实现简单计算器的具体代码,供大家参考,具体内容如下

要求:输入一个包含+ - * /的非负整数计算表达式,计算表达式的值,每个字符之间需有一个空格,若一行输入为0,则退出程序。

输入样例:

4 + 2 * 5 - 7 / 11

输出样例:

13.36

实现代码:

#include <iostream> #include <stack> using namespace std; char str[200];//保存表达式字符串 int mat[][5]={//设置优先级1表示优先级较大,0表示较小 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1,1,0,0, }; stack<int> op;//运算符栈 stack<double> in;//数字栈 void getOp(bool &reto,int &retn,int &i){ if(i==0&&op.empty()==true){ reto=true; retn=0; return; } if(str[i]==0){ reto=true; retn=0; return; } if(str[i]>='0'&&str[i]<='9'){ reto=false; }else{ reto=true; if(str[i]=='+'){ retn=1; }else if(str[i]=='-'){ retn=2; }else if(str[i]=='*'){ retn=3; } else if(str[i]=='/'){ retn=4; } i+=2; return; } retn=0; for(;str[i]!=' '&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0'; } if(str[i]==' '){ i++; } return; } int main(int argc, char *argv[]) { while(gets(str)){ if(str[0]=='0'&&str[1]==0) break; bool retop;int retnum; int idx=0; while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); while(true){ getOp(retop,retnum,idx); if(retop==false){ in.push((double)retnum); } else { double tmp; if(op.empty()==true||mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) tmp=a+b; else if(ret==2) tmp=a-b; else if(ret==3) tmp=a*b; else tmp=a/b; in.push(tmp); } op.push(retnum); } } if(op.size()==2&&op.top()==0) break; } printf("%.2f\n",in.top()); } return 0; }

测试输出:

2 + 4 * 2 - 2
8.00

如何轻松实现一个基础计算器功能?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计776个文字,预计阅读时间需要4分钟。

如何轻松实现一个基础计算器功能?

C++实现简单计算器的整体代码,供大家参考,具体内容如下:

cpp#include #include #include #include

using namespace std;

double calculate(const string& expression);

int main() { string expression; cout << 请输入包含+ * /的非负整数表达式: <

double calculate(const string& expression) { stack values; stack ops;

for (size_t i=0; i

while (!ops.empty()) { double val2=values.top(); values.pop(); double val1=values.top(); values.pop(); char op=ops.top(); ops.pop(); values.push(apply_op(val1, val2, op)); }

return values.top();}

bool has_precedence(char op1, char op2) { if (op2=='(' || op2==')') { return false; } if ((op1=='*' || op1=='/') && (op2=='+' || op2=='-')) { return false; } return true;}

double apply_op(double val1, double val2, char op) { switch (op) { case '+': return val1 + val2; case '-': return val1 - val2; case '*': return val1 * val2; case '/': return val1 / val2; default: throw Invalid operator; }}

C++实现简单计算器的具体代码,供大家参考,具体内容如下

要求:输入一个包含+ - * /的非负整数计算表达式,计算表达式的值,每个字符之间需有一个空格,若一行输入为0,则退出程序。

输入样例:

4 + 2 * 5 - 7 / 11

输出样例:

13.36

实现代码:

#include <iostream> #include <stack> using namespace std; char str[200];//保存表达式字符串 int mat[][5]={//设置优先级1表示优先级较大,0表示较小 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1,1,0,0, }; stack<int> op;//运算符栈 stack<double> in;//数字栈 void getOp(bool &reto,int &retn,int &i){ if(i==0&&op.empty()==true){ reto=true; retn=0; return; } if(str[i]==0){ reto=true; retn=0; return; } if(str[i]>='0'&&str[i]<='9'){ reto=false; }else{ reto=true; if(str[i]=='+'){ retn=1; }else if(str[i]=='-'){ retn=2; }else if(str[i]=='*'){ retn=3; } else if(str[i]=='/'){ retn=4; } i+=2; return; } retn=0; for(;str[i]!=' '&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0'; } if(str[i]==' '){ i++; } return; } int main(int argc, char *argv[]) { while(gets(str)){ if(str[0]=='0'&&str[1]==0) break; bool retop;int retnum; int idx=0; while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); while(true){ getOp(retop,retnum,idx); if(retop==false){ in.push((double)retnum); } else { double tmp; if(op.empty()==true||mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) tmp=a+b; else if(ret==2) tmp=a-b; else if(ret==3) tmp=a*b; else tmp=a/b; in.push(tmp); } op.push(retnum); } } if(op.size()==2&&op.top()==0) break; } printf("%.2f\n",in.top()); } return 0; }

测试输出:

2 + 4 * 2 - 2
8.00

如何轻松实现一个基础计算器功能?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。