字符串转换为整数
2016-04-13 17:31
351 查看
题目
转换字符串到整数
实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。样例
"10" =>10
"-1" => -1
"123123123123123" => 2147483647
"1.0" => 1
分析
该题目在LintCode上属于困难级别。主要是必须考虑全面,特别是要注意删除源串头尾无效字符以及判断合法性。源码
/* 54 转换字符串到整数 实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。 样例 "10" =>10 "-1" => -1 "123123123123123" => 2147483647 "1.0" => 1 */ class Solution { public: /** * @param str: A string * @return An integer */ int atoi(string str) { // write your code here if (str.empty()) { return 0; }//if int len = str.length(); /*删除字符串开头多余的0*/ int beg = 0; while (beg < len && (str[beg] == ' ' || str[beg] == '0')) { ++beg; }//while /*删除字符串结尾多余的非数字字符*/ int end = beg + 1; while (end < len && (str[end] >= '0' && str[end] <= '9')) { ++end; }//while /*得到有效字符串*/ str = str.substr(beg, end - beg); if (!isValid(str)) { return 0; }//if len = str.length(); bool posi = str[0] == '-' ? false : true; int minq = INT_MIN / 10, minr = INT_MIN % 10; int sum = 0; for (int i = (!posi || str[0] == '+') ? 1 : 0; i<len; ++i) { if (str[i] == '.') { break; }//if int num = '0' - str[i]; if ((sum < minq) || (sum == minq && num < minr)) { /*溢出*/ return posi ? INT_MAX : INT_MIN; }//if sum = sum * 10 + num; }//for /*溢出*/ if (posi && sum == INT_MIN) { return INT_MAX; }//if return posi ? -sum : sum; } bool isValid(string str) { if (str.empty()) { return true; }//if int len = str.length(); if ((str[0] != '-' && str[0] != '+') && (str[0] < '0' || str[0] > '9')) { return false; }//if if ((str[0] == '-' || str[0] == '+') && (len == 1 || str[0] == '0' || str[0] == '.')) { return false; }//if if (str[0] == '0' && len > 1) { return false; }//if for (int i = 1; i<len; ++i) { if ((str[i] < '0' || str[i] > '9') && (str[i] != '.')) { return false; }//if if (str[i] == '.' && (i + 1) == len) { return false; }//elif }//for return true; } };GitHub源码
相关文章推荐
- 利用eclipse抽取 代码片段为方法
- JS的跨域理解
- JSON入门之二:org.json的基本用法
- css去掉iPhone、iPad默认按钮样式
- oracle 记录
- Java反射机制--肤浅认知
- oracle 记录
- oracle 记录
- oracle 记录
- oracle 记录
- 给定字符的ASCIIn次幂且取膜后的数字,求原来的字符串(快速幂+打表)
- 2016.4.13--css总结
- JS获取节点的兄弟,父级,子级元素
- Centos6.4 + PHP5.5.11 + Mysql5.6.16 + Tnginx2.02 + Memcached1.4.17 + Redis2.2
- bootstrap左侧栏样式
- libevent入门小例子
- 第七周项目1——成员函数、友元函数和一般函数的区别
- phpMyAdmin配置文件config.inc.php详解
- Servlet+Tomcat制作出第一个运行在Tomcat上的Java应用程序
- 漫谈程序员(十二)IT程序猿之猿体是革命的本钱