题外话:
某天晚上梦见更了五六篇博客而不知疲惫.
如果这是现实该多好啊哈哈哈!美梦成真吧!
中项表达式就是最普通的表达式.也是几个小定义来回递归.这个题在去年期末上机题中出现过,但是比这个还有难一些.
呜呜呜,去年的我啥都不会(当然现在也是),为难我干什么呀!!!!
解:
1 #include <iostream> 2 using namespace std; 3 /* 4 * 感觉脑子有坑x10086 5 * 6 * 7 * 8 * 首先前两个是需要循环的,因为有连加的情况, 9 * 而最后一种不用,括号里面直接就是一个新的表达式 10 * 11 * 其次注意返回值,,, 12 * 13 * 因为可能没有+-*/所以result 上来就是??_value的值,就不要先搞个sum=0 return sum这个玩意了 14 */ 15 int term_value(); 16 int factor_value(); 17 int expreesion_value(){ 18 19 int result = term_value(); 20 while(1){ 21 char op=cin.peek();//查看第一个字符但是不取走 22 if(op=='+'||op=='-'){ 23 if(op=='+') { 24 cin.get();//取走一个字符 25 int value = term_value(); 26 result = result + value; 27 } 28 else{ 29 cin.get();//取走一个字符 30 int value = term_value(); 31 result = result - value; 32 } 33 34 } 35 else{ 36 break; 37 } 38 } 39 return result; 40 } 41 int term_value(){ 42 43 int result = factor_value(); 44 while(1){ 45 char op=cin.peek(); 46 if(op=='*'||op=='/'){ 47 if(op=='*') { 48 cin.get(); 49 int value = factor_value(); 50 result = result *value; 51 } 52 else{ 53 cin.get(); 54 int value = factor_value(); 55 result = result / value; 56 57 } 58 } 59 else{ 60 break; 61 } 62 } 63 return result; 64 65 } 66 int factor_value(){ 67 int result=0; 68 69 70 char op = cin.peek(); 71 if (op == '(') { 72 cin.get(); 73 result = expreesion_value(); 74 cin.get(); 75 } else { 76 while (isdigit(op)) { 77 result = result * 10 + op - '0';//计算整数 78 cin.get(); 79 op = cin.peek(); 80 } 81 } 82 83 return result; 84 } 85 86 87 88 89 90 91 int main(){ 92 cout<<expreesion_value(); 93 94 }