方法:遍历
1.判断字符串是否为空,知道遇到字符串不为空。
2.判断字符串是否是负号,如果是负号,flag记为false;
3.再判断字符串正负,无论正负,字符串下标往下移动。
4.将字符串转换数字res=res*10+str[i]-‘0’;判断res是否大于INT_MAX和判断符号标志位flag。
5.输出res,如果flag为true,则res为正数;如果flag为负数,res为负数。
注意:int 十进制:-2^31=-21 4748 3648
2^31-1=21 4748 3647
因为负数绝对值比正数绝对值大。所以res>=INT_MAX,是判断整数的,res>INT_MAX是判断负数的。
函数代码:
class Solution {
public:
int myAtoi(string str) {
int flag=true;
int i=0;
while(str[i]==' ')
{
i++;
}
if(str[i]=='-')
{
flag=false;
}
if(str[i]=='-'||str[i]=='+')
{
i++;
}
long res=0;
for(;i<str.size()&&isdigit(str[i]);i++)
{
int c=str[i]-'0';
res=res*10+c;
if(res>=INT_MAX&&flag==true)
{
return INT_MAX;
}
if(res>INT_MAX&&flag==false)
{
return INT_MIN;
}
}
if(flag)
{
return res;
}
else
{
return -res;
}
}
};