要注意的问题:
int _strToInt2(const char *str){
const int maxLimit= ((unsigned int)0-1)>>1;
const int minLimit= maxLimit+1;
//********************************************************************
int _size=strlen(str); //如果str是NULL,那么使用strlen会出现error
if(str==NULL || _size==0){
cout<<"The string is empty or empty"<return 0;
}
//********************************************************************
int _size=strlen(str);
bool res=true;
bool signal=0;
int sum=0;
int i=0;
if(str[0]=='+'){
++i;
}else if (str[0]=='-'){
++i;
signal=1;
}
while(res&&i<_size){
if( maxLimit<sum || sumfalse;
cout<<"over flow"<if('0'<=str[i] && str[i]<='9'){
sum= sum*10+(str[i]-'0');
++i;
}else{
sum=0;
res=false;
}
}
if(signal)
sum=-1*sum;
if(!res){
return sum;
}
return (int)sum;
}
错误地方如下:
在//********************************************************************
之间的代码。原因是:
如果str是NULL,那么使用strlen会出现error.(如果最后一个字符不是’\0’结尾,你就不能使用strlen )
下面代码
if( maxLimit<sum || sumfalse;
cout<<"over flow"<
int _strToInt2(const char *str){
const int maxLimit= ((unsigned int)0-1)>>1;
const int minLimit= maxLimit+1;
if( str==NULL || *str=='\0'){
cout<<"The string is empty "<return 0;
}
int _size=strlen(str);
bool res=true;
bool signal=0;
long int sum=0;
int i=0;
if(str[0]=='+'){
++i;
}else if (str[0]=='-'){
++i;
signal=1;
}
while(res&&i<_size){
if(maxLimit/10<sum){
sum=maxLimit;
res=false;
cout<<"over flow"<break;
}
if( sum10){
sum=minLimit;
res=false;
cout<<"over flow"<break;
}
if('0'<=str[i] && str[i]<='9'){
sum= sum*10+(str[i]-'0');
++i;
}else{
sum=0;
res=false;
}
}
if(signal)
sum=-1*sum;
if(!res){
return sum;
}
return sum;
}
int myAtoi(string str) {
if(str.empty())
{
cout<<"string is empty"<return 0;
}
int MaxLimit=((unsigned int)0-1)>>1;
int MinLimit=MaxLimit+1;
bool sign=false;
int i=0,res=0;
while(i<str.size() && str[i]==' ')
++i;
if(str[i]=='-')
{
++i;
sign=true;
}else if(str[i]=='+'){
++i;
}
while(i<str.size())
{
int oldres=res;
//cout<
if( '0'<=str[i] && str[i]<='9' )
{
res = res*10 + int(str[i]-'0');
}else{
break;
}
if(res/10!=oldres)
{
if(sign)
res=MinLimit;
else
res=MaxLimit;
break;
}
++i;
}
if(sign)
res=-1*res;
return res;
}
class Solution(object):
def myAtoi(self, s):
"""
:type str: str
:rtype: int
"""
if(len(s)==0):
return 0
s=s.strip()
l=list(s)
sign=-1 if s[0]=='-' else 1
if(l[0] in ['+','-']):
del l[0]
r,i=0,0
while iand l[i].isdigit() :
r=r*10+int(l[i])
i=i+1
r=sign*r
return min(max(-1*2**31,r),2**31-1)