题目出处
https://leetcode.com/submissions/detail/64717103/
实现
注意几点,是在实现过程中发现的:
实现的是10进制转换
最前面可以有空格, 如输入“ 2324"
前面可以有符号“+” “-”, 如输入: “+123" 或“-987" 等
输入中可能有其他字符, 如 "342ab232", 输出342
输入超过int最大值时, 返回int最大值0x7fffffff
输入小于int最小值时,返回 0x80000000.
算法实现:
int myAtoi(string str) {
if(str == "")return 0;
long ret = 0;
int sign = 1;
int index = 0;
//跳过开头的空格
while(isspace(str[index])) index++;
//计算第一个字母
if(str[index] >'9' || str[index] <'0'){
if(str[index] == '-') {sign = -1; index++;}
else if(str[index] == '+') {sign = 1;index++;}
else return 0;
}
// int last = index;
// while(last < str.length() && str[last] >= '0' && str[last] <= '9'){last++;}
// if(last-index < 11){
// while(index < last){
// ret = 10*ret + (str[index++]-'0');
// }
// }
// else{
// ret = 0X80000000;
// }
while(index < str.length() && str[index] >= '0' && str[index] <= '9'){
ret = 10*ret + (str[index++]-'0');
if(ret >= 0X80000000) break;
}
if(sign == 1 && ret > 0x7FFFFFFF) return 0x7FFFFFFF;
if(sign == -1 && ret > 0X80000000) return 0X80000000;
return sign*ret;
}