#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <math.h>
int my_atoi(const char* str)
{
assert(str);
size_t len = strlen(str);
size_t j = len - 1;
// 个位(1234中的4)
int ret = str[j--] - '0';
// 十位百位千位...相加(比如1234中的3与10相乘得到30,2与100相乘得到200)
for (int i = 10; i < pow(10, len); i *= 10)
{
ret += (str[j--] - '0') * i;
}
return ret;
}
int main()
{
char str[10] = "1234";
printf("%d\n", my_atoi(str));
return 0;
}
核心:
- 字符’0’ - 字符’9’的ASCII码值范围是48 - 57;
- 字符’0’的ASCII码是48,那么想要得到整数数字0-9,只需要用字符’0’-‘9’中任意一个字符 减去字符’0’即可得到相应0-9的整数数字,如字符’0’-'0’相当于48-48得到0,‘9’-'0’相当于57-48得到9。
- 先取到个位数,后面的十位数开始都要与相应位数的10相乘得到想要的数字,比如1234中先取到个位4,再取到3与10相乘得到30,以此类推累计相加。