#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
int myAtoi(string str) {
long long res = 0;
bool flag; //用flag来判断正负数!
int nl = 0;
if (str.empty())
{
return 0; //判断str是否为空!
}
for (int i = 0; i < str.length(); i++)
{
if (str[i] != ' ')
{
nl = i; //记录第一个非空的字符下标!
break;
}
}
str = str.erase(0, nl); //把前面的空格去掉!
if (str.empty()) //还要再次判断处理后的str是否为空!
{
return 0;
}
if (str[0] != '+' && str[0] != '-' && str[0]<'0' && str[0]>'9')//如果第一个字符不符合要求就return 0!
{
return 0;
}
for (int i = 0; i < str.length() && res <= INT_MAX; i++)
{
if (i == 0)
{
if (str[i] == '+' || (str[i] >= '0'&&str[i] <= '9')) //把第一个为‘+’或者为数字都归为一类!
{
flag = 1;
if(str[i] != '+')
res = res * 10 + (str[i] - '0');
continue;
}
if (str[i] == '-') //把负号归为一类!
{
flag = 0;
continue;
}
if (str[i] >= '0'&&str[i] <= '9')
{
res = res * 10 + (str[i] - '0');
continue;
}
}
if (i != 0 && str[i] >= '0'&&str[i] <= '9')
{
res = res * 10 + (str[i] - '0');
}
else break;
}
if(res> INT_MAX) return flag == 1 ? 2147483647 :-2147483648 ; //如果传入的数大于INT_MAX或者小于INT_MIN,return INT_MAX(正数)或者 -(INT_MAX+1)
return flag == 1 ? res : -res;
}
};
刷题总结:
本题整数的范围:2的31次方~-2的32次方减一(即 2147483647~ -2147483648)
用一个flag标记正负数方便处理
用到string类对字符串进行处理