Leetcode8 字符串转换整数 (atoi)
并不难,主要是把题目读懂。
- 空格为无所谓的字符
- 第一个有效字符必须为数字or正负号
- 第一个有效字符后面只要不是数字就直接结束判断
- 有效数字必须在int(-231~231-1)范围内
因此思路是:
- 去除空格
- 判断一次空格后面的符号(如果有的话)
- 接下来循环转化数字,循环条件(isnum? or endof str?)
代码:
int myAtoi(char * str){
int flag=1;
int num=0;
while(*str==' '){
str++;
}
if(*str=='-'){
flag=0;
str++;
}else if(*str=='+'){
flag=1;
str++;
}
while(*str!='\0' && (*str<='9' && *str>='0')){
if(num>INT_MAX/10 || (num==INT_MAX/10 && *str>'7')){//因为是从正数转化为负数,所以要都按正数溢出标准
if(flag==1){
return INT_MAX;
}else{
return INT_MIN;
}
}else{
num=num*10+(*str-'0');
str++;
}
}
if(flag==1)
return num;
else
return -num;
}