【atoi函数详解】

文章目录

  • 一. 什么是atoi函数
  • 二. 模拟实现函数atoi
  • 三. 总结atoi

一. 什么是atoi函数

atoi函数是将常量字符串转化为整数

int atoi(const char str);*

注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返回截断后的值即int的最大左右范围值。
举个例子:

#include 
#include 
int main()
{
	int ret1 = atoi("-123");
	int ret2 = atoi("11111111111111111111111");
	printf("%d\n", ret1);
	printf("%d\n", ret2);
	printf("%d\n", INT_MAX);
}

结果表明超过int范围的值结果会截断,截断后值和int最大值一样。
【atoi函数详解】_第1张图片

二. 模拟实现函数atoi

上面不理解,没事,看例子——》
例子一:传一个空字符串
例子二:情况二、传一个空指针
例子三:传一个空格加整数的字符串
例子四:传一个整数加字母的字符串
例子五:传一个字母加整数字符串
例子6:传一个负整数

#include
#include
#include
#include

int main()
{
	printf("%d\n", atoi(""));
	printf("%d\n", atoi("    123"));
	printf("%d\n", atoi("123sgsdg"));
	printf("%d\n", atoi("adgd123"));
	printf("%d\n", atoi("-123"));
	return 0;
}

【atoi函数详解】_第2张图片
例子一和四都是非法转换,所以模拟实现要先处理这两种情况:

#include 
#include 
#include 
enum Status
{
	VALID,
	INVALID
};
enum Status status = INVALID;
int my_atoi(const char* str)
{
	if (str == NULL)
	{
		return 0;
	}
	if (*str == '\0')
	{
		return 0;
	}
	//空白字符
	while (isspace(*str))
	{
		str++;
	}
	int flag = 1;
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	//处理数字字符
	long long ret = 0;
	while (isdigit(*str))
	{
		ret = ret * 10 + (*str - '0') * flag;
		if (ret<INT_MIN || ret>INT_MAX)
		{
			return 0;
		}
		str++;
	}
	if (*str == '\0')
	{
		status = VALID;
		return (int)ret;
	}
	else
	{
		return (int)ret;
	}
}
int main()
{
	int ret = my_atoi("-123");
	if (status == VALID)
		printf("合法转换:%d\n", ret);
	else
		printf("非法转换:%d\n", ret);
	return 0;
}

三. 总结atoi

1、该函数首先会丢弃尽可能多的空白字符,直到找到第一个非空白字符,然后,从这个字符开始,取一个可选的初识加号或者减号,后跟尽可能多的十进制数字,并将他们返回一个int类型的数值。
2、若该字符串是在整数的字符后包含其他字符,则这些字符将会被忽略,返回其他字符之前的整数,并且不会对该函数造成任何影响。
3、若该字符串中第一个非空字符序列表示有效的整数,或是一个空指针,或只包含空白字符,则不执行任何转换,并且返回零。

小弟制作不易,劳烦各位兄弟点点小小的关注,谢谢了

你可能感兴趣的:(c语言,数据结构,算法,visual,studio)