题目

字符串转换为数字。

 

解法

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

 

代码

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

 

相关文章:

  • 2021-09-14
  • 2021-05-21
  • 2021-06-07
  • 2021-09-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
猜你喜欢
  • 2021-06-21
  • 2022-01-20
  • 2021-10-27
  • 2021-12-08
  • 2022-01-12
相关资源
相似解决方案