String to Integer (atoi)
题目要求将string转换为数字(包括正负数,也就是说可以带正负号),如果该数字前含有除空格外的其他字符,则默认为0。而且数字一旦超过int型可以表示的范围,则取int可以表示的最大值/最小值。
本题目的话只要注意一些条件即可:非法字符,空格。
解法:一开始我们要跳过字符串前面的空格,遇到不是空格即停下。判断该位置是否是正负号,如果不是则为0。否则判断下一位置是否为数字,不是则为0,是的话将数储存起来,继续操作直到遇到字母即可停止。
class Solution {
public:
int myAtoi(string str)
{
int index=0;
while(str[index]==' ')
index++;
int flag=1;
if(str[index]=='-')
{
index++;
flag=-1;
}
else if(str[index]=='+')
index++;
int res=0;
while(index<str.size())
{
if(str[index]<'0' || str[index]>'9')
return flag*res;
int digit=str[index]-'0';
if(flag==1 && res*10.0+digit>INT_MAX)
return INT_MAX;
else if(flag==-1 && -(res*10+digit)<INT_MIN)
return INT_MIN;
res = res*10+digit;
index++;
}
return flag*res;
}
};