码迷,mamicode.com
首页 > 编程语言 > 详细

简单的表达式计算 c++

时间:2018-05-10 00:05:23      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:include   mina   --   res   png   names   nat   结束   express   


1
#include<iostream> 2 #include<stack> 3 #include<string> 4 #include<vector> 5 #include<map> 6 #include<algorithm> 7 using namespace std; 8 9 map<const char, int> priority;//用map来储存运算符的优先级 10 11 int compare(char a, char b){ 12 int cmp = 0; 13 if(b==) && a==() cmp = 0; 14 else if(a==() cmp = -1; 15 else if(priority[a] < priority[b]) cmp = -1; 16 else if(priority[a] >= priority[b]) cmp = 1; 17 return cmp; 18 } 19 20 int cal(int a, int b, char op){ 21 int ans; 22 if(op==+) ans = a+b; 23 else if(op==-) ans = a-b; 24 else if(op==*) ans = a*b; 25 else if(op==/) ans = a/b; 26 return ans; 27 } 28 29 int calculator(){ 30 //根据优先级的关系,可以把他们的优先级定义为下面的形式 31 //个别运算符的优先级是与位置前后有关系的,需要特俗处理 32 priority[#] = -1; 33 priority[)] = 0; 34 priority[+] = 1; 35 priority[-] = 1; 36 priority[*] = 2; 37 priority[/] = 2; 38 priority[(] = 3; 39 cout<<"please input valid expression, enter to terminate..."<<endl; 40 char ch = getchar(); 41 stack<char> op; 42 stack<int> nums; 43 op.push(#); 44 nums.push(0); 45 bool flag = true; 46 while(ch!=# || op.top()!=#){ 47 if(ch<=9 && ch>=0){ 48 int number = 0; 49 while(ch>=0 && ch<=9){//连续出现的数字看做一个整体 50 number = number*10 + (ch-0); 51 ch = getchar(); 52 } 53 // cout<<"number: "<<number<<endl; 54 // cout<<"op: "<<ch<<endl; 55 nums.push(number); 56 flag = true; 57 }else{//比较栈顶运算符和新输出运算符的优先级 58 int cmp = compare(op.top(), ch); 59 //cout<<"compare("<<op.top()<<","<<ch<<") = "<<cmp<<endl; 60 if(cmp==-1){//顶部优先级低时,把新的运算符压栈 61 op.push(ch); 62 flag = false; 63 ch = getchar(); 64 }else if(cmp==0){//即栈顶和新的运算符是‘(‘和‘)‘,需要把‘(‘弹出 65 op.pop(); 66 ch = getchar(); 67 }else if(cmp==1){//栈顶运算符优先级高的时候,就要进行运算 68 int num1, num2, tempans; 69 char tempop;//一定要注意num的顺序,否则会导致错误的运算结果 70 num2 = nums.top(); 71 nums.pop(); 72 num1 = nums.top(); 73 nums.pop(); 74 tempop = op.top(); 75 op.pop(); 76 tempans = cal(num1, num2, tempop); 77 //cout<<"tempans: "<<tempans<<endl; 78 nums.push(tempans); 79 } 80 if(ch==- && !flag) nums.push(0); 81 82 } 83 } 84 cin.get(); 85 return nums.top(); 86 } 87 int main(){ 88 int i = 10; 89 while(i--){ 90 cout<<calculator()<<endl; 91 } 92 return 0;}

 这个程序没有检错功能

输入只能包含0-9,+,-,*,/,(,),#;

#只能出现在表达式尾部表示输入结束

保证你的表达式语法正确

下面是一些例子

技术分享图片

简单的表达式计算 c++

标签:include   mina   --   res   png   names   nat   结束   express   

原文地址:https://www.cnblogs.com/mr-stn/p/9017273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!