题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
解题
初始版
class Solution {
public:
int StrToInt(string str) {
if(str.length()==0) return 0;
int num=0;
bool minus=false;
int start=0;
while(str[start]==' '){
start++;
}
if(str[start]=='-'){
minus=true;
start++;
}
if(str[start]=='+'){
start++;
}
for(int i=start; i<str.length(); i++){
if(str[i]>='0' && str[i]<='9'){
num=num*10+(str[i]-'0');
}
else{
num=0;
break;
}
}
if(minus) return 0-num;
else return num;
}
};
- 考虑字符输入的有效性;
- 考虑正负数;
- 考虑上整数溢出;
- 考虑下整数溢出;
class Solution {
public:
int StrToInt(string str) {
if(str.length()==0) return 0;
int num=0;
bool minus=false;
int start=0;
while(str[start]==' '){
start++;
}
if(str[start]=='-'){
minus=true;
start++;
}
if(str[start]=='+'){
start++;
}
while(str[start]!='\0'){
if(str[start]>='0' && str[start]<='9'){
num=num*10+(str[start]-'0');
if((!minus && num>0x7FFFFFFF) || (minus && (0-num)<(signed int) 0x80000000)){
num=0;
break;
}
}
else{
num=0;
break;
}
start++;
}
if(minus) return 0-num;
else return num;
}
};