目录
1.引言
2.atio函数功能回顾
3.模拟实现的思路
4.代码实现
5.总结
———————————————————————————————————————————
正文开始
1.引言
- 简述
atoi
函数在编程中的常见用途。 - 为什么要模拟实现这个函数(例如,加深对数据转换的理解、应对特殊需求等。
2.atio函数功能回顾
- 正式描述
atoi
函数的功能- 它在标准库中的作用,即如何将输入的字符串转换为整数。
- 处理的规则,如跳过开头的空白字符、正负号的处理以及遇到非数字字符的处理方式。
- 溢出情况的简要说明(如果输入转换后的结果超出了
int
类型所能表示的范围)。
3.模拟实现的思路
/*
如果开始遇到了空格 那么需要一直过滤
+ - 会影响 这个数字 的正负
在这个字符串当中 如果出现了非数字字符 那么就结束转换
如果 转换之后的数字 大于 int最大值 那么按照最大值算 相反 如果比最小值还小 那么就按照最小值算
*/
补充一点:这里会用到两个库函数
分别是:isspace 是判断传入的是不是空格 用这个函数必须包含头文件 #include<stdlib.h>
isdigit 来判断传入的参数是不是数字字符 用这个函数必须包含头文件 #include <ctype.h>
4.代码实现
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
enum S
{
VAILD,//合法的
INVAILD//不合法的
}state = INVAILD;
int MyAtoI(const char* str)
{
assert(str != NULL);
if (*str == '\0')
{
return 0;
}
// isspace 返回值不为0 代表是空格
while (isspace(*str))
{
str++;
}
//代码走到这里之后str遇到的一定不是空格了
int flg = 1;
if (*str == '+')
{
flg = 1;
str++;
}//123
else if(*str=='-')
{
flg = -1;
str++;
}
//123a
//需要把字符串当中所有的字符判断一遍
long long ret = 0;
while (*str != '\0')
{
//123
if (isdigit(*str))//如果是数字字符 -- 返回值不为0
{
//是数字字符 把字符1 变成 数字 1 --> '1' - '0' = 1
ret = ret * 10 + (*str - '0')*flg;
if (ret > INT_MAX)
{
ret = INT_MAX;
}
if (ret < INT_MIN)
{
ret = INT_MIN;
}
}
else
{
//不是数字字符
return (int)ret;
}
str++;
}
if (*str == '\0')
{
state = VAILD;
}
return (int)ret;
}
int main()
{
int ret = MyAtoI("-12a3");
if (state == VAILD)
{
printf("合法转化:%d\n", ret);
}
else
{
printf("不和法转化:%d\n", ret);
}
return 0;
}
5.总结
要模拟实现atoi函数要运用前面学习的枚举、指针以及库函数的使用
———————————————————————————————————————————
完