由于以前对atoi()函数理解的不够透彻,导致中间出现了许多Wrang ANS,可以说是考虑的不够,但是没测试过那么多用例,怎么能写出各种情况下的处理方式呢?通过不断Wrang,终于知道了atoi()函数处理的各种情况,下面是写的两端代码,以供后面复习。
代码1:直接凭自己的感觉和错误提示编写,写的比较乱。
class Solution {
public:
int atoi(const char *str) {
if(str==NULL) return 0;
long long number=0;
int flag=1,f1=0;
char c=' ';
while(*str!='\0')
{
if(*str=='+')
{
if(f1==0) flag=1,f1=1;
else return 0;
}
else if(*str=='-')
{
if(f1==0) flag=-1,f1=1;
else return 0;
}
else if(*str==' ')
{
if(c!=' ') break;
}
else if(*str>='0' && *str<='9')
{
number=number*10+(*str)-'0';
}
else break;
c=*str;
str++;
}
if(number > INT_MAX) return flag == 1 ? INT_MAX : INT_MIN;
else return (int)number*flag;
}
};
代码2:对所有错误用例总结后,恍然大悟,对原来代码做了改进。
class Solution {
public:
int atoi(const char *str) {
if(str==NULL) return 0;
while(*str==' ') str++;
int flag=1;
if(*str=='+'|| *str=='-')
{
if(*str=='+') flag=1;
else flag=-1;
str++;
}
long long number=0;
while(*str>='0' && *str<='9')
{
number=number*10+*str-'0';
str++;
}
if(number>INT_MAX) return flag==1?INT_MAX:INT_MIN;
else return (int)number*flag;
}
};
学习的过程就是如此,不断错误和不断完善。