题目:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入输出描述:输入一个字符串,包括数字字母符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0
输入:+2147483647 输入:2147483647 输出:1a33 输出:0
分析:需要考虑:(1)输入空串(2)边界条件(上下溢出)(3)正负号(4)前面的空格需要跳过(5)不合法的输入,有时候还要区分输出0到底是不合法的数字串导致还是空串导致,这时候可以用一个全局的标志位来处理
int StrToInt(string str) {
//字符串->整数
//数值为0,或者字符串不合法输出0
int len=str.size();
if(len==0)
return 0;
int flag=1;//用来标记正负的
int i=0;
if(str[0]=='+')
{
i++;
}
else if(str[i]=='-')
{
flag=-1;//表示是负数
i++;
}
int sum=0;
while(str[i]!='\0')
{
while(str[i]==' ')//前面的跳过空格
{
i++;
}
if(isdigit(str[i]))//是数字
{
sum=sum*10+str[i++]-'0';
//边界考虑
if(sum*flag>INT_MAX)
{
return INT_MAX;
}
if(sum*flag<INT_MIN)
{
return INT_MIN;
}
}
else//不合法的字符串
{
sum=0;
break;
}
}
return sum*flag;//注意乘上这个正负标志
}