题解 | #表达式求值#

表达式求值

https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 返回表达式的值
 * @param s string字符串 待计算的表达式
 * @return int整型
 */
#include <math.h>
//是否为字符
int issy(char n , const char* symbol){
    for(int i = 0 ; i < 5 ; i++){
        if(n == symbol[i]) return 1;
    }
    return 0;
} 
//符合优先级
int whot(char top , char sy){ 
    if(top == '+' || top =='-'){
        if(sy == '+' || sy == '-') return 0;
    }
    else if(top == '*'){
        if(sy != '(' && sy !=')') return 0;
    }

    return 1;
}
//计算
void count(int* num , int* numt , char s){
    int  num1 = num[*numt] ;
    *numt = *numt - 1;
    int num2 = num[*numt];
    if(s == '+') num[*numt] = num2 + num1;
    else if(s == '-') num[*numt] = num2 - num1;
    else num[*numt] = num1 * num2;
}
int solve(char* s ) {
    // write code here
    int num[100];
    char sy[100];
    int numt = -1 , syt = -1;
    char symbol[5] = {'+' , '-' , '*' , '(' , ')'};
    while(*s != '\0'){
        if(issy(*s , symbol) == 0){
            int x = 0;
            while(issy(*s , symbol) == 0 && *s != '\0'){
                x = x*10 + *s - '0';
                s++;
            }
            num[++numt] = x;
            s--;
        }
        else{
            if(syt == -1 || *s == '(' || sy[syt] == '(') sy[++syt] = *s;
            else{
                char top = sy[syt];
                if(whot(top , *s) == 0){
                    count(num , &numt , top);
                    sy[syt] = *s;
                }
                else if(*s == ')'){
                    while(sy[syt] != '('){
                        top = sy[syt--];
                        count(num , &numt , top);
                    }
                    syt--;
                }
                else sy[++syt] = *s;
            }    
        }
        s++;
    }
    
    while(syt > -1){
        count(num , &numt , sy[syt]);
        syt--;
    }
    
    return num[0];
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 18:05
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务