c语言练习题60:模拟实现atoi

模拟实现atoi

代码:

#include<assert.h>
#include<stdio.h>
#include<ctype.h>
#include<limits.h>
int my_atoi(const char* str)
{
	assert(str != NULL);
	if (*str == '\0')
	{
		return 0;
	}
	//isspace 判断一个字符是不是空格
	while (isspace(*str))
	{
		str++;
	}
	//代码执行到这里后str指向的是一个非空格的字符
	int flag = 1;
	if (*str == '+') {
		flag = 1;
		str++;
	}
	if (*str == '-') {
		flag = -1;
		str++;
	}
	//代码执行到这里后能够判断正负数
	long long ret = 0;
	while (*str != '\0') {
		//判断是否为数字字符
		if (isdigit(*str)) {//利用ASCII表
			ret = ret * 10 + (*str) - '0';
			if (ret > INT_MAX)
			{
				return INT_MAX;
	        }
			if (ret <  INT_MIN)
			{
				return INT_MIN;
			}
		}
		else
		{
			//直接结束转换
			return (int)ret * flag;
		}
		str++;
	}
	return (int)ret * flag;
}
int main() {
	const char* str = "   0 -123abd";
	int ret = my_atoi(str);
	printf("%d\n", ret);
	return 0;
}

结果:

Supongo que te gusta

Origin blog.csdn.net/2301_77479435/article/details/132921497
Recomendado
Clasificación