题目:
实现一个函数StrToInt,实现把字符串转换成整数这个功能。
要注意到题目中的陷阱
1
空指针异常,或者字符串空串 *Str = '\0'
2
只有一个正负号的问题
3,
负数的转化
#include <iostream>
using namespace std;
int g_nStatus = false;
int StrToIntCore(char *str,int minus)
{
int num = 0;
while(*str != '\0')
{
if(*str>='0' && *str<='9')
{
int flag = minus ? -1 : 1;
num = num *10 + flag*(*str-'0');
if((minus && num < (unsigned int ) 0x800000000) || (!minus && num > 0x7FFFFFFF))
{
num = 0;
break;
}
str++;
}
else
{
num =0 ;
break;
}
}
if(*str == '\0')
{
g_nStatus = false;
}
return num;
}
int StrToInt(char *str)
{
int num ;
int minus = 0;
if(str == NULL && *str != '\0')
{
g_nStatus = true;
return 0;
}
if(*str == '+')
{
str++;
if(*str <='0' || *str >= '9')
{
num = 0;
g_nStatus = true;
}
}
else if(*str == '-')
{
str++;
minus = 1;
if(*str <='0' || *str >= '9')
{
num = 0;
g_nStatus = true;
}
}
if(*str != '\0')
num = StrToIntCore(str,minus);
return num;
}
void test()
{
int num =0 ;
num = StrToInt("-");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("+123");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("-123");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("-0");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("+");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("123.3");
cout<<num<<" "<<g_nStatus<<endl<<"**********"<<endl;
num = StrToInt("0");
cout<<num <<endl<<"**********"<<endl;
num = StrToInt("123");
cout<<num <<endl<<"************"<<endl;
}
int main()
{
test();
cout << "Hello world!" << endl;
return 0;
}