问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
3.1、表达式只含 +, -, *, / 四则运算符,不含括号
3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3.3、要考虑加减乘除按通常四则运算规定的计算优先级
3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
3.5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
int calculate(int len, char *expStr)
【输入】 int len: 字符串长度;
char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
示例:
1)输入:char *expStr = “1+4*5-8/3”
函数返回:19
2)输入:char *expStr = “8/3*3”
函数返回:6
1 #include<stdio.h> 2 template <typename T> 3 class MyStack{ 4 int top; 5 int sum; 6 T a[100]; 7 public: 8 MyStack(){top = -1; sum = 0;} 9 T getTop(){return a[top];} 10 int getSize(){return sum;} 11 bool pop() 12 {if(top >=0) 13 { 14 top--; 15 sum--; 16 return true; 17 } 18 else return false; 19 } 20 bool push(T value) 21 { 22 if (top >= 99) 23 return false; 24 else 25 { 26 a[++top] = value; 27 sum++; 28 } 29 } 30 31 }; 32 int switchCal(char c) 33 { 34 switch(c) 35 { 36 case ‘+‘: 37 case ‘-‘: 38 return 1; 39 case ‘*‘: 40 case ‘/‘: 41 return 2; 42 default: 43 return 0; 44 } 45 } 46 int calc(char c,int i,int j) 47 { 48 switch(c) 49 { 50 case ‘+‘: return i+j; 51 case ‘-‘: return i-j; 52 case ‘*‘: return i*j; 53 case ‘/‘: return i/j; 54 default: 55 return 0; 56 } 57 } 58 59 int calculate(int len, char *expStr) 60 { 61 char *p = expStr; 62 int i,j; 63 MyStack<int> num; 64 MyStack<char> cal; 65 while (*p != ‘\0‘) 66 { 67 if (cal.getSize() > 0 && switchCal(cal.getTop()) == 2 ) 68 { 69 i = num.getTop(); 70 printf("\n"); 71 printf("pop: %d ",i); 72 num.pop(); 73 j = *p - ‘0‘; 74 p++; 75 printf("jump: %d ",j); 76 printf(" calculate %c ",cal.getTop()); 77 i = calc(cal.getTop(),i,j); 78 cal.pop(); 79 num.push(i); 80 printf("push: %d ",i); 81 } 82 if (*p == ‘\0‘) 83 break; 84 if (*p >= ‘0‘ && *p <= ‘9‘) 85 { 86 i = *p - ‘0‘; 87 printf("push: %d ",i); 88 num.push(i); 89 } 90 else 91 { 92 cal.push(*p); 93 printf("push: %c ",*p); 94 } 95 p++; 96 } 97 while (cal.getSize()) 98 { 99 i = num.getTop(); 100 num.pop(); 101 j = num.getTop(); 102 num.pop(); 103 i = calc(cal.getTop(),j,i); 104 cal.pop(); 105 num.push(i); 106 } 107 printf("\n"); 108 return num.getTop(); 109 } 110 int main() 111 { 112 int len; 113 char str[100]; 114 scanf("%d%s",&len,str); 115 printf("%d\n",calculate(len,str)); 116 }
这题还有点麻烦,忘记怎么把中缀式改为前缀式了~呀。。。。
只能用中缀式计算了,还好输入那么完美
时间: 2024-11-08 20:08:27