C语言三组数四则运算字符串求结果

文章介绍了在C语言中使用atoi函数将字符串转换为整数,以解决解析类似4+5+6的数学表达式的问题。作者编写了一个简单的程序,通过拆分字符串并应用加减乘除操作计算结果,还提到了用ASCII码直接转换的方法作为替代。
摘要由CSDN通过智能技术生成

昨天大一期末考试,有一道题是求类似于”4+5+6“、”2*6+4”或者“3*3*3”这样的有三组数字的式子最后的结果,当时第一步怎么把数给提取出来就懵了。考完后在网上查找了一下有一种atoi的函数可以将字符串转化为整数

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int ret = atoi("-123");
	printf("%d\n", ret);
}

 然后本人以此函数为前提写出了如下代码:

先将字符串分为三部分,然后再加减乘除。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strToInt(char* str) {
    return atoi(str);
}

int main(){
    char s[20];
    char s1[20], s2[20], s3[20];
    char op1, op2;
    int i, j, k = 0, sum;
    scanf("%s", s);
    for(i = 0; i < 20; i++) {
        if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {
            op1 = s[i];
            for(j = 0; j < i; j++) {
                s1[j] = s[j];
            }
            i++;
            break;
        }
    }
    for(; i < 20; i++) {
        if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {
            op2 = s[i];
            for(j = j + 1; j < i; j++) {
                s2[k++] = s[j];
            }
            k = 0;
            i++;
            break;
        }
    }   
    for(; i < 20; i++) {
        if(s[i] == '\0') {
            for(j = j + 1; j < i; j++) {
                s3[k++] = s[j];
            }
            break;
        }
    }

    if(op1 == '*' || op1 == '/') {
        if(op1 == '*') {
            sum = strToInt(s1) * strToInt(s2);
        } else {
            sum = strToInt(s1) / strToInt(s2);
        }
        if(op2 == '+') {
            sum += strToInt(s3);
        } else if(op2 == '-') {
            sum -= strToInt(s3);
        } else if(op2 == '*') {
            sum *= strToInt(s3);
        } else {
            sum /= strToInt(s3);
        }
    } else if(op2 == '*' || op2 == '/') {
        int temp;
        if(op2 == '*') {
            temp = strToInt(s2) * strToInt(s3);
        } else {
            temp = strToInt(s2) / strToInt(s3);
        }
        if(op1 == '+') {
            sum = strToInt(s1) + temp;
        } else {
            sum = strToInt(s1) - temp;
        }
    } else {
        if(op1 == '+') {
            sum = strToInt(s1) + strToInt(s2);
        } else {
            sum = strToInt(s1) - strToInt(s2);
        }
        if(op2 == '+') {
            sum += strToInt(s3);
        } else {
            sum -= strToInt(s3);
        }
    }

    printf("%d\n", sum);
}

写完此代码后我意识到可以用ASCII码来替代atoi函数的作用

int myAtoi(char* str) {
    int result = 0;
    for(int i = 0; str[i] != '\0'; i++) {
        result = result * 10 + (str[i] - '0');
    }
    return result;
}

如上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值