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 };