字符串转换为整型
文章目录
//不用atoi,实现字符串转数字 //考虑边界:字符串NULL,正负号,int 型最大0x7fffffff,负数最小0x80000000
//区分“0”的输出结果和无效字符串的输出
#include <iostream>
using namespace std;
enum Status {kValid=0, kInvalid};
int g_nStatus=kValid;//输出状态
long long StrToIntCore(const char* str, bool minuss){
long long num=0;
while(*str!='\0'){
if(*str>='0' && *str<='9'){//有效数字
int flag=minuss?-1:1;
num=num*10+flag*(*str-'0');
if((!minuss && num>0x7fffffff)||(minuss && num<(signed int)0x80000000)){//超过long long表示范围,注意signed int
num=0;
break;
}
str++;
}
else{//非法输入
num=0;
break;
}
}
if(*str=='\0')//字符串为空
{
g_nStatus=kValid;
}
return num;
}
int StrToInt(const char* str){
g_nStatus=kInvalid;
long long num=0;
if(str!=NULL && *str !='\0'){
bool minuss=false;//正负号
if(*str=='+')
str++;
else if(*str=='-'){
str++;
minuss=true;
}
if(*str!='\0'){
num=StrToIntCore(str,minuss);
}
}
return (int)num;
}
int main()
{
cout << StrToInt("-123") << endl;
cout << StrToInt("+123") << endl;
cout << StrToInt("0") << endl;
cout << StrToInt("") << endl;
return 0;
}