首页 > 代码库 > C语言 多次运算字符串,输出结果(不容易啊,调了1个多小时,才调整出来。。。。)!希望大神们有更好的办法,能够指点一二

C语言 多次运算字符串,输出结果(不容易啊,调了1个多小时,才调整出来。。。。)!希望大神们有更好的办法,能够指点一二

//输入一个多次运算字符串,输出结果,只支持四则运算,只支持整数。

//解析字符串运算(无括号状态下)

int calculatorFinal(char *str)

{

    //jieGuo[100][10]用于存放解析出来的数组

    char *p[100], jieGuo[100][10];

    int result, secondNumber, i = 0, j = 0;

    char tempNumber[20], op;

    

    for (i = 0; i < 100; i++) {

        p[i] = jieGuo[i];

    }

    i = 0;

    

    //解析字符串,并放到二维数组

    while (*str) {

        

        if (*str >= ‘0‘ && *str <= ‘9‘) {

            tempNumber[j] = *str;

            j++;

        }else{

            tempNumber[j] = ‘\0‘;

            strcpy(p[i], tempNumber);

            i++;

            for (int j = 0; j < 20; j++) {

                tempNumber[j] = ‘\0‘;

            }

            tempNumber[0] = *str;

            strcpy(p[i], tempNumber);

            i++;

            tempNumber[0] = ‘\0‘;

            j = 0;

        }

         str++;

    }

    strcpy(p[i], tempNumber);

    i++;

    for (int j = 0; j < 20; j++) {

        tempNumber[j] = ‘\0‘;

    }

    tempNumber[0] = *str;

    strcpy(p[i], tempNumber);

//    printf("*****解析字符串结果********\n");

//    for (j = 0; j < i; j++) {

//        puts(p[j]);

//    }

//    printf("*****乘除法********\n");

    for (int n = 0; n < i; n++) {

        if (n % 2 == 1) {

            op = p[n][0];

            if (op == ‘*‘) {

                result = atoi(p[n - 1]) * atoi(p[n + 1]);

//                printf("result = %d\n", result);

                for (int m = n; m < i; m++) {

                    if (m == n) {

//                        printf("result = %d\n", result);

                        sprintf(p[m -1], "%d", result);

//                        puts(p[m - 1]);

                    }

                    //判断此计算是否为最后一组,是的话停止移动数组,不是的话移动

                    if (m + 2 != i) {

                        strcpy(p[m], p[m + 2]);

                        strcpy(p[m + 1], p[m + 3]);

                    }else if (m + 2 == i) {

                        //每进行一次运算则将数组往上移动,并重头开始检测‘*’、‘/’

                        //并将数组大小减小2

                        n = 0;

                        i -= 2;

                        break;

                    }

                }

                

            }else if (op == ‘/‘){

                result = atoi(p[n - 1]) / atoi(p[n + 1]);

                for (int m = n; m < i; m++) {

                    if (m == n) {

//                        printf("result = %d\n", result);

                        sprintf(p[m -1], "%d", result);

//                        puts(p[m - 1]);

                    }

                   //判断此计算是否为最后一组,是的话停止移动数组,不是的话移动

                    if (m + 2 != i) {

                        strcpy(p[m], p[m + 2]);

                        strcpy(p[m + 1], p[m + 3]);

                    }else if (m + 2 == i) {

                        //每进行一次运算则将数组往上移动,并重头开始检测‘*’、‘/’

                        //并将数组大小减小2

                        n = 0;

                        i -= 2;

                        break;

                    }

                }

                

            }

        }

    }

//    printf("*****乘除法----结果********\n");

//    for (j = 0; j < i; j++) {

//        puts(p[j]);

//    }

//    printf("*****加减法----结果********\n");

    for (int n = 0; n < i; n++) {

        if (n % 2 == 1) {

            op = p[n][0];

            if (op == ‘+‘) {

                result = atoi(p[n - 1]) + atoi(p[n + 1]);

//                printf("result = %d\n", result);

                for (int m = n; m < i; m++) {

                    if (m == n) {

//                        printf("result = %d\n", result);

                        sprintf(p[m -1], "%d", result);

//                        puts(p[m - 1]);

                    }

                    //判断此计算是否为最后一组,是的话停止移动数组,不是的话移动

                    if (m + 2 != i) {

                        strcpy(p[m], p[m + 2]);

                        strcpy(p[m + 1], p[m + 3]);

                    }else if (m + 2 == i) {

                        //每进行一次运算则将数组往上移动,并重头开始检测‘*’、‘/’

                        //并将数组大小减小2

                        n = 0;

                        i -= 2;

                        break;

                    }

                }

            }else if (op == ‘-‘){

                result = atoi(p[n - 1]) - atoi(p[n + 1]);

                for (int m = n; m < i; m++) {

                    if (m == n) {

//                        printf("result = %d\n", result);

                        sprintf(p[m -1], "%d", result);

//                        puts(p[m - 1]);

                    }

                    //判断此计算是否为最后一组,是的话停止移动数组,不是的话移动

                    if (m + 2 != i) {

                        strcpy(p[m], p[m + 2]);

                        strcpy(p[m + 1], p[m + 3]);

                    }else if (m + 2 == i) {

                        //每进行一次运算则将数组往上移动,并重头开始检测‘*’、‘/’

                        //并将数组大小减小2

                        n = 0;

                        i -= 2;

                        break;

                    }

                }

            }

        }

    }

    return result;

}

C语言 多次运算字符串,输出结果(不容易啊,调了1个多小时,才调整出来。。。。)!希望大神们有更好的办法,能够指点一二