题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
class Solution { public: int StrToInt(string str) { int len=str.size(); if(str=="0" || len==0) return 0; int num=0; int i=0; int flag; if(str[0]<='9' && str[0]>='0') { flag=1; } if(str[0]=='+') { flag=1; i++; } if(str[0]=='-') { flag=-1; i++; } for(;i<len;i++) { if(str[i]<='9' && str[i]>='0') { num=num*10+(str[i]-'0'); } else { return 0; } } return flag*num; } };
if(str=="0" || len==0) return 0;此处改成这样的话,可以优化一点。
/*
C++ 实现
看起简单的一道题,却要注意处理各种非法输入的问题,如下:
1.str.size()==0
2.str里只有一个空字符
3.str里有非0到9的数字、非正号、非负号 的符号
4.溢出:负整数的最小值为0x7FFFFFFF,正整数的最大值为0x80000000,注意边界值
*/
class Solution { public: bool isInvalid=false;//全局变量,标志位的作用 int StrToInt(string str) { int length=str.size(); if(length==0) return 0; int start=0; bool Above0=true; int num=0; if(str[0]=='+')//正负号只可能出现在第一位,出现在其他地方即非法。 { start=1; Above0=true; } else if(str[0]=='-') { start=1; Above0=false; } for(int i=start;i<length;i++)//字符转为整型 { if(str[i]>='0'&&str[i]<='9') num=10*num+str[i]-'0'; else return 0; } if(num==0)//如果输入的值为0,此情况是合法输入! isInvalid=true; if(Above0==false) num=-num; //边界值!int类型的最大正数:0x7fffffff;int类型的最小负数:0x80000000。 if(num<=0x7FFFFFFF&&num>=(signed int)0x80000000) { return num; } return 0; } };