问题:
1.单引号双引号混淆
2.没有设定n值,判断的范围是*c的范围
3.根本想不出n的表达式,括号范围也没给对
4.c++写成n++
5.没有强转
文章来源:https://uudwc.com/A/6zad3
#include<ctype.h>
#include<limits.h>
//#include<stdlib.h>
enum State
{
INVALUE, //0
VALUE //1
};
State = INVALUE;//默认均为非法转换
int my_atoi(const char* c)
{
int flag = 1;//判断正负号的转换标志
// 1.NULL
if (NULL == c)
{
return 0;
}
// 2.空白字符
while (isspace(*c))
{
c++;
}
// 3."+/-"符号存在
if (*c == '+')
{
flag = 1;
c++;//往后移动
}
else if (*c == '-')//单引号才行,否则进不去循环
{
flag = -1;
c++;
}
// 4.纯数字的字符转换
long long n = 0;//以防初始值太小
while (isdigit(*c))
{
n = n * 10 + (*c - '0') * flag;
//(n * 10 + *c - '0') * flag会报错,由于括号的存在,会先计算n * 10 + *c,然后再减去'0'
if (n <= INT_MIN || n >=INT_MAX)
{
return 0;
}
c++;
}
if (*c == '\0')
{
State = VALUE;
return (int)n;
}
if (isalnum(*c))
{
State = INVALUE;
return (int)n;
}
}
int main()
{
const char* c = " +1234";//const在*左边:不改动内容
int ret = my_atoi(c);
if (ret == 0)
{
printf("非法转换:%d\n", ret);
}
else
{
printf("合法转换:%d\n", ret);
}
return 0;
}
文章来源地址https://uudwc.com/A/6zad3