atoi函数---使用和模拟实现


atoi函数的使用
#include <stdio.h>
#include <stdlib.h>
int main()
{
char arr[20] = "4831213";
int ret = 0;
ret = atoi(arr);
printf("arr:%s\n", arr);
printf("ret:%d\n", ret);
return 0;
}

atoi函数的模拟实现
#include <stdio.h>
#include <stdlib.h>
#include<ctype.h>
#include<assert.h>
enum State//判断是否是合法转化
{
yes,//合法
no//非法
}state = no;
int my_atoi(const char* str)
{
assert(str);
if (*str == '\0')
{//空字符串返回0
return 0;
}
if (isspace(*str))//返回值不为0,代表是空格
{
str++;
}
//到这里str后面就一定不是空格了
int flag = 1;
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
//需要把字符串中所有的字符串全部判断一遍
long long ret = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
//是数字字符 把字符1转换为数字1——》 ’1‘-’0‘=1
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++;
}
if (*str == '\0')
{
state = yes;
}
return (int)ret;
}
int main()
{
int val;
char str[20] = "84841548";
int num = my_atoi(str);
if (state == yes)
{
printf("有效转换:%d\n", num);
}
else
{
printf("无效转换:%d\n", num);
}
return 0;
}
