第一次AC
#include<iostream>
using namespace std;
class Solution {
public:
int atoi(const char *str) {
if (*str==NULL){
return 0;//空串
}
//假定只有'0'~'9','+','-',' ';没有'a''A''&'等字符
long long res=0;//注意java中为long
//过滤开始的空格
while(*str==' ')
str++;
//需要考虑数的正负
bool sign=true;//true为正数,false为负数
if (*str=='+'||*str=='-'){
if(*str=='-')
sign=false;
str++;
}
//开始读取
while(*str!='\0'){
if(*str>'9'||*str<'0')
break;
res=*str-'0'+res*10;
str++;
}
if(res>2147483647){
if(sign)
return 2147483647;
return -2147483648;
}
else{
if(sign)
return (int)res;
else
return (int)-res;
}
}
};
int main(){
Solution s1;
char str[]="-2147483648";
int result=s1.atoi(str);
cout<<result<<endl;
return 0;
}
第二次AC
#include <iostream>
using namespace std;
class Solution {
public:
int atoi(const char *str) {
if (str==NULL){
return 0;//空串
}
//假定合法的字符只有'0'~'9','+','-',' '
long long res=0;//注意java中为long
//定义最大值和最小值
int Int_MAX=2147483647;
int Int_MIN=-2147483648;
//过滤开始的空格
while(*str==' ')
str++;
//需要考虑数的正负
bool sign=true;//true为正数,false为负数
if (*str=='+'||*str=='-'){
if(*str=='-')
sign=false;
str++;
}
//字符范围介于'0'~'9'之间
while(*str<='9'&&*str>='0'){
res=*str-'0'+res*10;
str++;
}
if(res>Int_MAX)
return sign==true?Int_MAX:Int_MIN;
return sign==true?(int)res:(int) -res;
}
};
int main(){
Solution s1;
//char str[]="-2147483648";
char str[]="2147483648";
int result=s1.atoi(str);
cout<<result<<endl;
return 0;
}