模拟实现atoi Convert strings to double (atof), integer (atoi, _atoi64), or long (atol).
需要注意1. 空指针
2. 空字符串
3. 遇到了非数字字符
4. 超出范围
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
enum Status
{VALID,INVALID
}sta=INVALID;//默认非法
int my_atoi(const char*str)
{int flag=1;assert(str);//判断是否为空指针if(*str=='\0')return 0;//非法while(isspace(*str))//判断一个字符是否为空字符{str++;} if(*str=='+'){flag=1;str++;}else if(*str=='-'){flag=-1;str++;}long long ret=0;// 防止数值越界while(*str){if(isdigit(*str))//判断是否为数字字符{ret=ret*10+flag*(*str-'0');if(ret>INT_MAX||ret<INT_MIN)//整形的最大值和最小值{return 0;}}else{return (int)ret;}str++;}if(*str=='\0'){sta=VALID;}return (int)ret;}
int main()
{char arr[1000];gets(arr);int ret = my_atoi(arr);if(sta==INVALID)printf("非法输入:%d\n",ret);else if(sta==VALID)printf("合法转换:%d\n",ret);return 0;
}