文章目录
- 一、atoi函数
- 1、函数原型
- 2、函数功能
- 3、函数返回
- 二、atoi使用
- 三、atoi函数模拟实现
一、atoi函数
1、函数原型
atoi函数参数为一个字符指针,返回类型是int,作用将字符串转换为整型。使用函数需要包含头文件stdlib.h
2、函数功能
- 解析c字符串,将其内容解析为整数,该整数作为返回值进行返回
- 该函数首先需要根据需要丢弃任意数量的空白字符(像使用isspace函数进行判断),直到找到第一个非空白字符。然后,从该字符开始采用可选的首字母进行加减,也就是将字符数字转换为整型数字并且将它返回
- 字符串可以包含构成整数的其他字符,这些字符将被忽略,不会影响函数的功能实现
- 如果首次出现在str这个字符串中的非空白字符不是有效的数字类型的字符,或者由于为空或仅包含空白字符而不存在此类序列,则不执行转换并返回零。
3、函数返回
如果成功,这个函数返回这个转换成整型的整型数字
如果转换后的值超出 一个整型数据的可表示值范围,则会导致未定义的行为。
二、atoi使用
要想学会函数的模拟实现我们除了要熟悉函数以上的介绍,还需要用atoi函数进行调试参考,具体观察atoi的功能实现
1、传进去一个空字符,返回值为0
2、如果在出现数据之前都是空白字符,则跳过空白字符
3、如果数值存在正负号,返回的数据也会分为正负数
4、后续数据如果碰到非数字字符则直接返回前面转换完的数字
5、如果超出了整型数据的范围,则返回最大值或者最小值
三、atoi函数模拟实现
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
int my_atoi(const char* str)
{
//判断传进来的字符指针的有效性,空指针无法进行访问与使用
assert(str);
//判断传进来的字符是否为空字符,是则返回0
if (*str == '\0')
{
return 0;
}
//判断传进来的数字是否是空白字符
while (isspace(*str))
{
str++;
}
//判断正负号
int flag = 1;
if (*str == '+')
{
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
//判断是否是字符数字
long long ret = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
//将字符数字转换为整型数据的数字
ret = ret * 10 + (*str - '0') * flag;
// 得到的是整型数字 整体的则是具有个位,十位,百位这种进制形式的
//判断是否超过了整型的最大值和最小值
if (ret > INT_MAX)
{
ret = INT_MAX;
}
if (ret < INT_MIN)
{
ret = INT_MIN;
}
}
else
{
return (int)ret;
}
str++;
}
return (int)ret;
}
int main()
{
char arr[] = " 9999999999999999999999999999";
int ret = my_atoi(arr);
printf("%d", ret);
return 0;
}