昨天大一期末考试,有一道题是求类似于”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;
}
如上