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;
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。