您的位置:首页 > 编程语言 > C语言/C++

字符串转整数(atoi) 十进制实现

2016-06-20 10:39 281 查看
题目出处
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ atoi 算法