题目:写一个函数StrToInt,实现把字符串转换成整数的功能。不能使用atoi或者其他类似的库函数。
测试用例:功能测试(输入的字符串表示正数、负数、0)
边界值测试(最大的正整数、最小的负整数)
特殊输入测试(输入的字符串为NULL指针、输入字符串为空字符串、输入的字符串中有非数字字符等)
代码如下:
enum Status{kValid=0,kInvalid};
int g_nStatus=kValid;
int StrToInt(const char* str)
{
bool minus=false;
g_nStatus=kInvalid;
long long num=0;
while(*str!='\0'&& str!=NULL)
{
if(*str=='+')
str++;
else if(*str=='-')
{
str++;
minus=true;
}
if(*str!='\0')
{
num=StrToIntCore(str,minus);
}
}
return (int)num;
}
long long StrToIntCore(const char* str,bool minus)
{
long long num=0;
while(*str!='\0')
{
if(*str>='0' && *str<='9')
{
int flag=minus?-1:1;
num=num*10+flag*(*str-'0');
if((!minus && num>0x7FFFFFFF)||(minus && num<(signed int )0x80000000))
{
num=0;
break;
}
str++;
}
else
{
num=0;
break;
}
}
if(*str=='\0')
{
g_nStatus=kValid;
}
return num;
}