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

atoi函数的模拟实现(结尾附源代码)


文章目录

  • atoi函数的模拟实现(结尾附源代码)
  • 一、atoi函数怎么用?
  • 二、初级atoi函数的模拟实现
  • 三、高级atoi函数的模拟实现
    • 1.判断空指针
    • 2.字符串为空
    • 3.空白字符
    • 4.判断正负号
    • 5.不是数字
    • 6.数组越界
    • 7.返回值的判断
    • 8.主函数中合法和非合法的判断
    • 9.不同问题的运行结果
  • 四、atoi函数模拟实现代码
  • 总结


一、atoi函数怎么用?

参考MSDN
【C语言】atoi函数的模拟实现_第1张图片
这个意思就是将字符串转换为double(atof)、integer(atoi,_atoi64)或long(atol)
简单来说就是把字符串”1234“转换成1234

代码实现如下(示例):

//模拟实现atoi函数
//第一步:先实现一下atoi函数
int main()
{
	char arr[10] = "1234";
	int ret = atoi(arr);
	printf("%d\n", ret);
	return 0;
}

在这里插入图片描述
了解完atoi函数的使用之后就可以进行模拟实现!


二、初级atoi函数的模拟实现

代码如下(示例):

//模拟实现atoi函数
int my_atoi(const char* str)
{
	int n = 0;
	while (*str)
	{
		n = n * 10 + (*str) - '0';
		str++;
	}
	return n;
}
int main()
{
	char arr[10] = "1234";
	int ret = my_atoi(arr);
	printf("%d\n", ret);
	return 0;
}

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


三、高级atoi函数的模拟实现

我们在模拟实现atoi函数的时候会遇到很多问题,下面让我来给大家一 一列举!

1.判断空指针

我们应该用assert断言一下str指针,确保不是空指针!

2.字符串为空

如果字符串为空字符串!在这里插入图片描述,我们可以直接返回0

代码如下(示例):

//字符串为空
	if (*str == '\0')
	{
		return 0;
	}

3.空白字符

在这里插入图片描述,如果字符串前面有空格,就用isspace判断空格,并跳过空格所在的地址!(不要忘了头文件)

代码如下(示例):

	//空白字符
	while (isspace(*str))
	{
		str++;
	}

4.判断正负号

在这里插入图片描述,如果字符串里面有正负号的情况下,返回的也必须是正数或者负数!所以定义变量flag!

代码如下(示例):

    int flag=1;
	//判断正负号
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	n = n * 10 + flag * (*str - '0');
	str++;

5.不是数字

在这里插入图片描述,用isdigit判断数字,如果数组里面带有ab等字符返回0(不要忘了头文件)

代码如下(示例):

if (isdigit(*str))
	{
	   //......
	}
else//不是数字是字符
	{
		break;
	}
	str++;

6.数组越界

在这里插入图片描述,如果这个数字大于INT_MAX或者小于INT_MIN就会返回0

代码如下(示例):

if (n<INT_MIN || n> INT_MAX)
	{
		n = 0;
		break;
	}

7.返回值的判断

这里有两种情况,1.转换完数组中全部数字后的\0返回。2.各种错误及非法访问返回的0
两种\0要进行判断,我们需要创建一个enum枚举常量!

代码如下(示例):

enum Status
{
	VALID,  //0
	INVALID //1
}status = INVALID;

//正常的\0返回值判断
if (*str == '\0')
	{
		status = VALID;
	}

8.主函数中合法和非合法的判断

代码如下(示例):

if (status == VALID)
		printf("正常转化: %d\n", ret);
	else
		printf("非法转换: %d\n", ret);

9.不同问题的运行结果

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


四、atoi函数模拟实现代码

代码如下(示例):

#include
#include
#include
enum Status
{
	VALID,
	INVALID
}status = INVALID;

int my_atoi(const char* str)
{
	int flag = 1;
	//判断空指针
	assert(str);

	//字符串为空
	if (*str == '\0')
	{
		return 0;
	}

	//空白字符
	while (isspace(*str))
	{
		str++;
	}

	//判断正负号
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}

	long long n = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))
		{
			n = n * 10 + flag * (*str - '0');
			if (n<INT_MIN || n> INT_MAX)
			{
				n = 0;
				break;
			}
		}
		else//不是数字是字符
		{
			break;
		}
		str++;
	}
	if (*str == '\0')
	{
		status = VALID;
	}
	return (int)n;
}

int main()
{
	char arr[100] = "123";
	int ret = my_atoi(arr);
	if (status == VALID)
		printf("正常转化: %d\n", ret);
	else
		printf("非法转换: %d\n", ret);
	return 0;
}

总结

例如:以上就是今天要讲的内容,本文介绍atoi函数的使用方法和模拟实现,大家以后接触一个函数之后也可以像这样来进行学习,如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
【C语言】atoi函数的模拟实现_第4张图片

你可能感兴趣的:(C语言,c语言,算法)