问题:输入一个整数字符串,把该字符串转化为整数并输出。
思路:需考虑几点:
1、输入字符串是否为空
2、结果是否能被整数表示
3、开头字符为符号
#include <iostream>
#include<assert.h>
#include<string.h>
#include<limits.h>
using namespace std;
//全局变量用来标记输入的字符串是否可以转化为整数
enum State {kValid=0,kInvalid};
int g_state=kValid;
int strToIntf(const char * a)
{
//初始化g_state为kInvalid
g_state=kInvalid;
long long num=0;
//断言a为非空
if(a!=NULL)
{
//cout<<g_state<<endl;
const char *digit=a;
bool minus=false;
//判断符号
if(*digit=='+')
{
digit++;
}
else if(*digit=='-')
{
digit++;
minus=true;
}
while(*digit!='\0')
{
if(*digit>='0' && *digit<='9')
{
//cout<<*digit<<endl;
num=10*num+(*digit-'0');
//cout<<num<<endl;
if(num>INT_MAX||num<INT_MIN)
{
num=0;
break;
}
digit++;
}
else
{
num=0;
break;
}
}
if(*digit=='\0')
{
g_state=kValid;
//cout<<a<<endl;
if(minus)
num=0-num;
}
}
return num ;
}
int main()
{
char s1[100]="";
char s2[100]="-12345";
char s3[100]="123456789201234556322";
char s4[100]="+123";
char s5[100]="+1=2a3";
cout<<"INT_MAX:"<<INT_MAX<<endl;
cout<<"INT_MIN:"<<INT_MIN<<endl;
cout<<strToIntf(s1)<<endl;
cout<<strToIntf(s2)<<endl;
cout<<strToIntf(s3)<<endl;
cout<<strToIntf(s4)<<endl;
cout<<strToIntf(s5)<<endl;
return 0;
}
输出结果:
INT_MAX:2147483647
INT_MIN:-2147483648
0
-12345
0
123
0