atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)

作者 : admin 本文共2271个字,预计阅读时间需要6分钟 发布时间: 2024-06-10 共1人阅读

        前言:在学习C语言的时候,我们知道每个字符都有其所对应的ASCII码值,当我们使用49来打印字符时,打印出来的就是数字字符 ‘ 1 ’,那么字符能否直接被转换成对应的整型数字呢?答案是当然可以,这时我们就需要使用atoi函数。


atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图

✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨欢迎访问我的主页秋刀鱼不做梦-CSDN博客

那么废话不多说,让我们直接开始!!!

我将会以以下三个方面来讲解atoi函数:

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(1)

1.atoi函数的作用

        先看一下官网对atoi函数的解释:

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(2)

解释如下:

        参数: str — 要转换为整数的字符串。

        返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

2.atoi函数的基本使用方法

        我们直接使用实例来进行讲解:(如图)

#include
#include
int main()
{
	char str[] = "-54321";
	int ret = atoi(str);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(3)

从上面的例子我们可以看出atoi函数将字符串 “ -54321 ” 转换成了整数 -54321,实现了将字符串直接转换成整型数据的操作,这也就是atoi函数的作用。

但是使用atoi函数还有几点使用细节需要注意:

        atoi函数的使用细节:

        1.使用atoi函数需要包含头文件;

        2.当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0;

        3.atoi函数会自动过滤开始时的空白字符;

        4.atoi函数会根据字符串内容自动判断整数的正负;

        5.当字符串的数字大小超过了整型数字的取值范围时,返回时会变为整型数据的最大或最小值;

        6.当字符串中的数字有非10进制字符隔断时,atoi函数会直接返回当前位置前面的数字;

现对第2条、第3条、第5条、第6条进行实例演示:

        第2条:当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0

#include
#include
int main()
{
	char str[] = "241";
	int ret = atoi(NULL);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(4)

           

#include
#include
int main()
{
	char str[] = "";
	int ret = atoi(str);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(5)

        

        第3条:atoi函数会自动过滤开始时的空白字符

#include
#include
int main()
{
	char str[] = "      -54321";
	int ret = atoi(str);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(6)

        第5条:当字符串的数字大小超过了整型数字的取值范围时,返回时会变为整型数据的最大或最小值

#include
#include
int main()
{
	char str[] = "238947283649234";
	int ret = atoi(str);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(7)

        第6条:当字符串中的数字有非10进制字符隔断时,atoi函数会直接返回当前位置前面的数字

#include
#include
int main()
{
	char str[] = "-543abc21";
	int ret = atoi(str);
	printf("%d", ret);

	return 0;
}

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)插图(8)

以上我们就了解了atoi函数的基本使用方法。

3.如何自我实现atoi函数

        在自我实现atoi函数之前,让我们来梳理一下实现atoi函数的思路:

(1)我们需要一开始就对参数进行判断,如果是NULL指针,则返回0,如果是空字符串则返回0

(2)然后开始过滤字符串开始时的空白字符

(3)判断字符串中的整型数据是正还是负

(4)开始读取字符串中的整型数据直到遇到第一个非10进制字符

  接下来看一下如何自我实现atoi函数:   

  

#include
#include
#include
int myAtoi(const char * str)
{
	//判断是否是NULL指针或空白字符串
	if (str == NULL)
		return 0;
	if (str == '
#include
#include
#include
int myAtoi(const char * str)
{
//判断是否是NULL指针或空白字符串
if (str == NULL)
return 0;
if (str == '\0')
return 0;
//过滤空白字符
while (isspace(*str))
{
str++;
}
//使用标志flag来判断数字正负
int flag = 1;
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
//由于字符串里的数字可能大于int类型的最大值,所以使用long long类型变量记录数据
long long ret = 0;
while (*str != '\0')
{
//如果是10进制数据
if (isdigit(*str))
{
ret = ret * 10 + (*str - '0') * flag;
str++;
if (ret > INT_MAX)
ret = INT_MAX;
if (ret < INT_MIN)
ret = INT_MIN;
}
//如果不是10进制数据
else
{
//由于atoi函数返回值为int类型,而刚才定义的变量是long long类型,所以要进行转换
return (int)ret;
}
}
return (int)ret;
}
') return 0; //过滤空白字符 while (isspace(*str)) { str++; } //使用标志flag来判断数字正负 int flag = 1; if (*str == '+') { flag = 1; str++; } else if (*str == '-') { flag = -1; str++; } //由于字符串里的数字可能大于int类型的最大值,所以使用long long类型变量记录数据 long long ret = 0; while (*str != '
#include
#include
#include
int myAtoi(const char * str)
{
//判断是否是NULL指针或空白字符串
if (str == NULL)
return 0;
if (str == '\0')
return 0;
//过滤空白字符
while (isspace(*str))
{
str++;
}
//使用标志flag来判断数字正负
int flag = 1;
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
//由于字符串里的数字可能大于int类型的最大值,所以使用long long类型变量记录数据
long long ret = 0;
while (*str != '\0')
{
//如果是10进制数据
if (isdigit(*str))
{
ret = ret * 10 + (*str - '0') * flag;
str++;
if (ret > INT_MAX)
ret = INT_MAX;
if (ret < INT_MIN)
ret = INT_MIN;
}
//如果不是10进制数据
else
{
//由于atoi函数返回值为int类型,而刚才定义的变量是long long类型,所以要进行转换
return (int)ret;
}
}
return (int)ret;
}
') { //如果是10进制数据 if (isdigit(*str)) { ret = ret * 10 + (*str - '0') * flag; str++; if (ret > INT_MAX) ret = INT_MAX; if (ret < INT_MIN) ret = INT_MIN; } //如果不是10进制数据 else { //由于atoi函数返回值为int类型,而刚才定义的变量是long long类型,所以要进行转换 return (int)ret; } } return (int)ret; }

上面代码中,每一个关键步骤都进行了解释,可以帮助读者更好的理解代码的实现!


以上就是atoi函数的所有内容了~~~

本站无任何商业行为
个人在线分享 » atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)
E-->