分析
细节题。注意几个测试用例:
1. 不规则输入,但是有效, ”-3924x8fc”, ” + 413”,
2. 无效格式, ” ++c”, ” ++1”
3. 溢出数据, ”2147483648”
代码:
#include <iostream>
#include <string.h>
#include <limits.h>
using namespace std;
int Atoi(const char *str)
{
int sign = 1;
const int len = strlen(str);
int i = 0;
int num = 0;
while(str[i] == ' ' && i < len) i++;
if (str[i] == '+')
i++;
else if (str[i] == '-')
{
sign = -1;
i++;
}
for (; i < len ; ++i)
{
if (str[i] < '0' || str[i] > '9')
break;
if (num > INT_MAX/10 || (num == INT_MAX/10 && (str[i]-'0') > INT_MAX%10))
{
return sign = -1?INT_MIN:INT_MAX;
}
num = num*10+str[i]-'0';
}
return sign*num;
}
int main()
{
int num = 0;
const char *str = "-3924x8fc";
const char *str2 = "++c"; //无效字符串
const char *str3 = "2147483649"; //越界
num = Atoi(str);
cout<<num<<endl;
num = Atoi(str2);
cout<<num<<endl;
num = Atoi(str3);
cout<<num<<endl;
return 0;
}