LeetCode题解——String to Integer(atoi)

题目

字符串转换为数字。

 

解法

这道题的意思是要考虑到,如果有前置的空字符,则跳过;如果超出数字范围,则返回最大/最小整数;如果碰到第一个不能转换的字符,则返回。

 

代码

 1 class Solution {
 2 public:
 3     int atoi(const char *str) {
 4         int sign = 1, result = 0;
 5         int len = strlen(str);
 6         int i = 0;
 7         
 8         for( ; i < len && str[i] == ' '; ++i)  //跳过前置的空字符
 9             ;
10         
11         if(str[i] == '+')    //如果有符号且为正
12             ++i;
13         else if(str[i] == '-')  //负数
14         {
15             sign = -1;
16             ++i;
17         }
18         
19         for( ; i < len; ++i)
20         {
21             if(str[i] < '0' || str[i] > '9')  //不能转换的字符
22                 break;
23             if(result > INT_MAX/10 || (result == INT_MAX/10 && str[i] > INT_MAX%10 + '0')) //即将超出int范围
24                 return sign == -1 ? INT_MIN : INT_MAX;
25             result *= 10;
26             result += str[i] - '0';
27         }
28         
29         return result * sign;  //记得加上符号位
30     }
31 };

 

posted @ 2014-06-02 22:06  阿杰的专栏  阅读(284)  评论(0编辑  收藏  举报