标签:com term logs cin main 没有 log cst 间接
编写一个程序求正常表达式的值
例:5+6*9 (中间没有空格)
下面是表达式的定义
显然这是一个间接的递归
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 using namespace std; 5 6 int expression_value(); 7 int term_value(); 8 int factor_value(); 9 10 int main() 11 { 12 printf("%d\n",expression_value()); 13 return 0; 14 } 15 int expression_value()//表达式 16 { 17 int more = 1; 18 int result = term_value();//第一项的值 19 char op; 20 while(more){//如果是不断用 + - 连接 则不断进行循环 21 op = cin.peek();//从流输入中复制到OP中 不是 取走 22 if(op == ‘+‘ || op == ‘-‘) 23 { 24 cin.get(); 25 if(op == ‘+‘) 26 result+=term_value();//如果是 + - 就 + - 下一项的值 27 else 28 result-=term_value(); 29 } 30 else more = 0; // 如果不是+ - 则停止循环 31 } 32 return result; 33 } 34 int term_value() 35 { 36 int more = 1; 37 int result = factor_value(); 38 char op; 39 while(more){ 40 op = cin.peek(); 41 if(op == ‘*‘ || op == ‘/‘) 42 { 43 cin.get(); 44 if(op == ‘*‘) 45 result *= factor_value(); 46 else 47 result /= factor_value(); 48 } 49 else more = 0; 50 } 51 return result; 52 } 53 54 int factor_value() 55 { 56 int result = 0; 57 int op; 58 op = cin.peek(); 59 if(op == ‘(‘){ 60 cin.get(); 61 result += expression_value(); 62 cin.get(); 63 } 64 else 65 while(isdigit(op)) //检验字符是否是阿拉伯数字 66 { 67 result = result * 10 + op - ‘0‘; // 每多输入一位 相当于 之前输入的数字大十倍 并且加上 刚才输入的数 68 cin.get(); 69 op = cin.peek(); 70 } 71 return result; 72 }
cin.peek() 从流输入中复制到一个对象中 并不是取走 此时流输入没有变化
cin.get() 从流输入中取走一个字符
isdigit() 检验char型对象中的值是否为阿拉伯数字 若是‘5‘则返回1 ‘P‘则返回0
标签:com term logs cin main 没有 log cst 间接
原文地址:http://www.cnblogs.com/16-CHQ/p/6663847.html