输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。字符串长度满足1≤n≤1000
输入描述:输入一个算术表达式
输出描述:得到计算结果示
输入:3+2*{1+2*[-4/(8-6)+7]}
输出:25
#include <stdio.h>
#include <string.h>// 1.无括号 用栈先乘除后加减
// 遇到+-继续入栈,遇到*/出栈1个,和新元素计算后入栈
// 2.有括号 左括号开始递归1步骤,右括号出递归结果 入栈
//注意遇到括号内有负号先要变号再入栈
int compute(char *data)
{int stack[1000];int top = -1;int len = strlen(data);char flag = '+';int i=0;while (i <=len){int num = 0;if(data[i]=='-'){flag = '-';i++;}if (data[i] == '{' || data[i] == '[' || data[i] == '('){i++;num = compute(data);}while (data[i] - '0' >= 0 && data[i] - '0'<=9){num = num * 10 + data[i] - '0';i++;}switch(flag){case '+':stack[++top] = num;break;case '-':stack[++top] = -num;break;case '*':stack[top] *= num;break;case '/':stack[top] /= num;break;}flag = data[i];if (data[i] == '}' || data[i] == ']' || data[i] == ')'){i++;break;}i++;}int ret = 0;for (int j = 0; j <= top; j++){ret += stack[j];}return ret;
}int main()
{char str[1000];scanf("%s", str);int res = compute(str);printf("%d", res);return 0;
}