问题:
1.单引号双引号混淆
2.没有设定n值,判断的范围是*c的范围
3.根本想不出n的表达式,括号范围也没给对
4.c++写成n++
5.没有强转
- #include
- #include
- //#include
- 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;
- }