题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
leetcode对应题目:8. 字符串转换整数 (atoi) 题目解答
总结:LeetCode上的是返回第一个整数,就是后面再有字母也无所谓。这里的话如果后面出现了就直接返回0.其他的就是要多注意一些边界条件了:如果字符串开头出现很多' '怎么办?出现了'+' '-'需要设计一个标志flag来表明,其他的就是在循环的过程中,一旦发现有非0~9的数字出现就返回0;越界:num > INT_MAX / 10 || num == INT_MAX /10 && str[i] > '7 '
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1) - 2147483648
class Solution {
public:
int StrToInt(string str) {
if(!str.size()) return 0;
int len = str.size();
int i =0;
while(i<len && str[i] == '0') i++;
int flag=1;
if(str[i] == '-') {flag = -1;i++;}
if(str[i] == '+') {flag = 1;i++;}
int res = 0;
while(i < len){
if(str[i] < '0' || str[i] > '9') return 0;
if(res > INT_MAX /10 || (res == INT_MAX/10 && str[i] > '7')){
if(flag == -1) return INT_MIN;
else return INT_MAX;
}
res = res*10 + str[i++] - '0';
}
if(flag == -1) res = -res;
return res;
}
};