题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
#include<string.h> #include<ctype.h> int p = 0; int result(char* str) { char std[1001] = { 0 }; strcpy(std, str); int len = strlen(std); int flag = '+'; int top = -1; int ret = 0; int stack[1000] = { 0 }; while (p < len) { int num = 0; while (std[p] >= '0' && std[p] <= '9') { num = num * 10 + std[p] - '0'; p++; } if (std[p] == '(' || std[p] == '[' || std[p] == '{') { p++; num = result(str); } switch (flag) { case '+': stack[++top] = num;break; case '-': stack[++top] = -num; break; case '*': stack[top] =stack[top]*num; break; case '/': stack[top] =stack[top]/num; break; } if (std[p] == ')' || std[p] == ']' || std[p] == '}') { p++; break; } flag = std[p]; p++; } for (int i = 0; i <= top; i++) { ret = ret + stack[i]; } return ret; } int main() { char str[1001] = { 0 }; scanf("%s", str); int p = 0; int put = result(str); printf("%d\n", put); return 0; }