实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。
样例
“10” =>10
“-1” => -1
“123123123123123” => 2147483647
“1.0” => 1
class Solution {
public:
/**
* @param str: A string
* @return An integer
*/
int atoi(string str) {
// write your code here
if(str.length()<=0) return 0;
int i=0;
bool flag=true;
while(str[i]==' ') i++;//处理前面的空格
if(str[i]=='+' || str[i]=='-')//处理前面的+、-号
{
if(str[i]=='+')
flag=true;
if(str[i]=='-')//处理前面的+、-号
flag=false;
i++;
}
long long sum=0;
int digit=0;
for(;i<str.length();i++)
{
if(str[i]<'0' || str[i]>'9') break;
else
{
int mins=(flag==true)?1:-1;
digit=mins*(str[i]-'0');
sum=sum*10+digit;
if((flag && sum>0x7fffffff))//正数
{
return numeric_limits<int>::max();
}
if(!flag && sum<(signed int)0x80000000)//负数
{
return numeric_limits<int>::min();
}
}
}
return sum;
}
};