C语言刷题(模拟实现atoi)——“C”

各位CSDN的uu们你们好呀,今天,小雅兰来为大家分享一个函数的模拟实现,这是一个比较有意思的东西,下面,让我们进入atoi的世界吧 


C语言刷题(模拟实现atoi)——“C”_第1张图片

C语言刷题(模拟实现atoi)——“C”_第2张图片

可知:atoi的功能是把一个字符串转化成整数 

剑指offer上出现过这样一个场面:

C语言刷题(模拟实现atoi)——“C”_第3张图片

C语言刷题(模拟实现atoi)——“C”_第4张图片 

C语言刷题(模拟实现atoi)——“C”_第5张图片 

C语言刷题(模拟实现atoi)——“C”_第6张图片 

C语言刷题(模拟实现atoi)——“C”_第7张图片 

C语言刷题(模拟实现atoi)——“C”_第8张图片 

C语言刷题(模拟实现atoi)——“C”_第9张图片 

C语言刷题(模拟实现atoi)——“C”_第10张图片 

C语言刷题(模拟实现atoi)——“C”_第11张图片 

C语言刷题(模拟实现atoi)——“C”_第12张图片 

C语言刷题(模拟实现atoi)——“C”_第13张图片 

C语言刷题(模拟实现atoi)——“C”_第14张图片 

C语言刷题(模拟实现atoi)——“C”_第15张图片 

C语言刷题(模拟实现atoi)——“C”_第16张图片 

实质上这个代码案例,就是讲的atoi的模拟实现

 为了不像上述面试案例的这位程序员一样:我们首先来看看,模拟实现atoi的注意事项

  • 空指针问题
  • 空字符串问题
  • +和-问题
  • 非数字字符问题
  • 越界问题

为了解决空指针问题,首先想到的是当然是断言啦!!!

//解决空指针问题
assert(str);

解决空字符串问题:

//解决空字符串问题
if (*str == '\0')
{
	return 0;
}

解决+和-的问题:

//解决+ —号的问题
if (*str == '+')
{
	flag = 1;
	str++;
}
else if(*str=='-')
{
	flag = -1;
	str++;
}

 解决越界的问题:

long long ret = 0;//解决越界的问题

解决非数字字符的问题:

while (*str)
{
	if (isdigit(*str))
	{
		ret = ret * 10 + flag * (*str - '0');
		if (ret > INT_MAX || ret < INT_MIN)
		{
			return 0;
		}
	}
	else
	{
		return (int)ret;
	}
	str++;
}

模拟实现atoi源代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
enum State
{
	VALID,
	INVALID
};
enum State s = INVALID;//非法的状态
//模拟实现atoi
//空指针
//空字符串
//  +  -
//非数字字符
//越界
int my_atoi(const char* str)
{
	//解决空指针问题
	assert(str);
	int flag = 0;
	//解决空字符串问题
	if (*str == '\0')
	{
		return 0;
	}
	//解决+ —号的问题
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if(*str=='-')
	{
		flag = -1;
		str++;
	}
	long long ret = 0;//解决越界的问题
	while (*str)
	{
		if (isdigit(*str))
		{
			ret = ret * 10 + flag * (*str - '0');
			if (ret > INT_MAX || ret < INT_MIN)
			{
				return 0;
			}
		}
		else
		{
			return (int)ret;
		}
		str++;
	}
	if (*str == '\0')
	{
		s = VALID;
	}
	return (int)ret;
}
int main()
{
	int ret = my_atoi("-1234567890");
	if (s == INVALID)
	{
		printf("非法转换\n");
		printf("%d\n", ret);
	}
	else
	{
		printf("合法转换\n");
		printf("%d\n", ret);
	}
	return 0;
}

好啦,小雅兰今天的模拟实现atoi就到这里啦,继续加油!!!

C语言刷题(模拟实现atoi)——“C”_第17张图片

 

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