【模拟实现C语言库函数】atoi的模拟实现

#include 
#include 
#include 
#include 
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;
}

核心:

  1. 字符’0’ - 字符’9’的ASCII码值范围是48 - 57;
  2. 字符’0’的ASCII码是48,那么想要得到整数数字0-9,只需要用字符’0’-‘9’中任意一个字符 减去字符’0’即可得到相应0-9的整数数字,如字符’0’-'0’相当于48-48得到0,‘9’-'0’相当于57-48得到9。
  3. 先取到个位数,后面的十位数开始都要与相应位数的10相乘得到想要的数字,比如1234中先取到个位4,再取到3与10相乘得到30,以此类推累计相加。

【模拟实现C语言库函数】atoi的模拟实现_第1张图片
【模拟实现C语言库函数】atoi的模拟实现_第2张图片

你可能感兴趣的:(刷题,C语言,c语言)