字符串转换为整数

来源:互联网 发布:软件外包网站 编辑:程序博客网 时间:2024/05/21 18:49

题目

 转换字符串到整数

实现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 hereif (str.empty()){return 0;}//ifint 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;}//iflen = 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;}//ifint num = '0' - str[i];if ((sum < minq) || (sum == minq && num < minr)){/*溢出*/return posi ? INT_MAX : INT_MIN;}//ifsum = sum * 10 + num;}//for/*溢出*/if (posi && sum == INT_MIN){return INT_MAX;}//ifreturn posi ? -sum : sum;}bool isValid(string str){if (str.empty()){return true;}//ifint len = str.length();if ((str[0] != '-' && str[0] != '+') && (str[0] < '0' || str[0] > '9')){return false;}//ifif ((str[0] == '-' || str[0] == '+') && (len == 1 || str[0] == '0' || str[0] == '.')){return false;}//ifif (str[0] == '0' && len > 1){return false;}//iffor (int i = 1; i<len; ++i){if ((str[i] < '0' || str[i] > '9') && (str[i] != '.')){return false;}//ifif (str[i] == '.' && (i + 1) == len){return false;}//elif}//forreturn true;}};
GitHub源码

0 0