atoi的规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。
下面针对以下问题对问题进行模拟实现
1.空指针
2.""空字符串的情况
3.空白字符
4.+/-
5.溢出
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
//空指针
//""
//空白字符
//+/-
//溢出
enum state
{
VALID,
INVALID
}state=INVALID;
int my_atoi(char* p)
{
assert(p);
if (*p == '\0')
{
return 0;
}
while(isspace(*p))
{
p++;
}
int flag = 1;
if (*p == '-')
{
flag = -1;
}
long long ret = 0;//考虑溢出的特殊情况
while (*p)
{
if (isdigit(*p))
{
ret = flag*(*p-'0') + ret * 10;//将字符转化成数字
if (ret > INT_MAX)
{
return INT_MAX;
}
else if(ret<INT_MIN)
{
return INT_MIN;
}
p++;
}
else
{
return ret;
}
}
state = VALID;//仅仅是此处合法的写法仅供供参考
return ret;
}
int main()
{
char arr[20] = " -12345665678";
int ret=atoi(arr);
printf("%d", ret);
}
感谢你的观看,希望对你有所帮助