评估以字符串forms给出的算术表达式

我正在开发一个项目,我需要计算以字符串forms给出的算术表达式的值。

所以我选择使用的方式就是运行字符串直到符号乘法。 在此期间,我保留乘法字符串之前的数字。 如果在这些数字之前有符号,我会重置字符串。 最后,当我产生乘法符号时,我检查接下来会发生什么并保存到另一个字符串中。 最后,我计算结果。 依此类推,直到我解决练习(还有其他function可以解决其余的方程)。

我的问题是:乘法符号之前的数字不会重置,除了在乘法符号之后的数字未保存在额外字符串中之外,还会产生问题。

找到乘法符号并计算他的函数 –

#include  #include  #include  int main(void) { char str[10] = "3+1-4*6-7"; char str1[10]; char str2[10]; int i, p = 0, k = 0; for(i = 0; i < 10; i++) { str1[k] = str[i]; k++; if((str[k] == '-') | '+' | '/') { str1[0] = 0; } else if(str1[k] == '*') { while((str[i] != '-') | '+' | '*' | '/') { str2[p] = str[i]; p++; i++; } } } printf("%s--%s\n", str1, str2); } 

感谢任何可以帮助我解决问题的人,或者可以推荐另一种解决方法。

 #include  #include  #include  typedef struct exp { char op; char *term; struct exp *left; struct exp *right; } Exp; Exp *make_exp2(char *str){ if(!str || !*str) return NULL;//*str == '\0' is format error. char *mul = strrchr(str, '*'); char *div = strrchr(str, '/'); Exp *node = malloc(sizeof(*node)); if(mul == NULL && div == NULL){ node->op = '\0'; node->term = str; node->left = node->right = NULL; return node; } char *op; op = mul < div ? div : mul; node->op = *op; *op = '\0'; node->left = make_exp2(str ); node->right = make_exp2(op+1); return node; } Exp *make_exp(char *str){ if(!str || !*str) return NULL;//*str == '\0' is format error. char *minus = strrchr(str, '-'); char *plus = strrchr(str, '+'); if(minus == NULL && plus == NULL) return make_exp2(str); char *op; Exp *node = malloc(sizeof(*node)); op = minus < plus ? plus : minus; node->op = *op; *op = '\0'; node->left = make_exp(str ); node->right = make_exp(op+1); return node; } #ifdef DEBUG void print(Exp *exp, int level){ int i; if(exp->op){ for(i=0;iop); for(i=0;iright, level+1); printf("\n"); for(i=0;ileft, level+1); printf("\n"); } else { for(i=0;iterm); } } #endif int main(void) { char str[] = "3+1-4*6-7"; Exp *exp = make_exp(str); #ifdef DEBUG print(exp, 0); #endif //release exp return 0; }