C语言中atoi函数模拟实现详析
#include
#include
#include
//通过枚举设置两种状态,分别代表字符串转换的合法性
enum Status
{
VALID, //合法
INVALID //非法
};
enum Status status = INVALID; //定义全局变量 status 为 INVALID,若转换合法,则将 status 变为 VALID,若非法则不变
int my_atoi(const char* str)
{
if (str == NULL) //字符串为空
{
return 0;
}
if (*str == '0') //空白字符
{
return 0;
}
while (isspace(*str)) //字符串前面有多余的空格,则一直往后移寻找符号或数字
{
str++;
}
int flag = 0; //flag 标志数字的正负
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
long long ret = 0;
while (isdigit(*str))
{
ret = ret * 10 + flag*(*str - '0');
if (ret
{
return 0;
}
str++;
}
if (*str == '0') //若字符串遍历完就走这一步,也就意味着该字符串的转换为合法的
{
status = VALID;
return (int)ret;
}
else //非法转换
{
return (int)ret;
}
}
int main()
{
//int ret = my_atoi("-123");
int ret = my_atoi(" -2222222222");
if (status == VALID)
{
printf("合法的转换:%d
", ret);
}
else
printf("转换不合法!返回值为:%d
",ret);
return 0;
}