字符串转整数(atoi) 十进制实现
2016-06-20 10:39
281 查看
题目出处
https://leetcode.com/submissions/detail/64717103/
实现
注意几点,是在实现过程中发现的:
实现的是10进制转换
最前面可以有空格, 如输入“ 2324"
前面可以有符号“+” “-”, 如输入: “+123" 或“-987" 等
输入中可能有其他字符, 如 "342ab232", 输出342
输入超过int最大值时, 返回int最大值0x7fffffff
输入小于int最小值时,返回 0x80000000.
算法实现:
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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性