再也不强行装逼要题目的英文描述,好多条件都没看出来,第一遍照着样例打的,错误一堆;
应该还能剪枝下;
#include <iostream>
using namespace std;
int myAtoi(string str)
{
long long result = 0;
bool flag1 = false, flag2 = false;
for (int i = 0; i < str.length(); i++)
{
while (str[i] == ' ') //等于空格 直接跳过
{
i++;
}
if (str[i] == '-') //等于-号 设标志 算出来result取负
{
if (flag1 == true || flag2 == true)//出现两个符号位 非法
return 0;
flag1 = true;
i++;
}
if (str[i] == '+')
{
if (flag1 == true || flag2 == true)
return 0;
flag2 = true;
i++;
}
while (str[i] >= '0' && str[i] <= '9') //如果是数字 这里完事
{
result = result * 10 + str[i++] - '0';
if (result != int(result)) //一定要及时判断 否则容易溢出 比如最后一个例子
{
if (flag1) //为负
return -2147483648;
else
return 2147483647;
}
}
break;//后面不用再判断了
}
if (flag1)
return -result;
else
return result;
}
int main()
{
string test;
cout << myAtoi("4193 word") << endl;
cout << myAtoi("word and 9987") << endl;
cout << myAtoi("42") << endl;
cout << myAtoi(" -42") << endl;
cout << myAtoi("-91283472332") << endl;
cout << myAtoi("+1") << endl;
cout << myAtoi("-+1") << endl;
cout << myAtoi("20000000000000000000") << endl;
return 0;
}