码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode(8):字符串转整数(atoi)

时间:2018-04-04 12:46:33      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:存在   验证   blog   应该   gpo   判断   博客   事先   问题   

Medium!

题目描述:

实现 atoi,将字符串转为整数。

提示:仔细考虑所有输入情况。如果你想挑战自己,请不要看下面并自己考虑所有可能的输入情况。

说明:这题解释的比较模糊(即没有指定输入格式)。你得事先汇集所有的输入情况。

 

atoi的要求:

这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或负号后面跟随尽可能多的数字,并将其解释为数字的值。

字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。

如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包含空白字符则不进行转换。

如果不能执行有效的转换,则返回 0。如果正确的值超过了可表示的范围,则返回 INT_MAX(2147483647)或 INT_MIN(-2147483648)。

解题思路:

字符串转为整数是很常用的一个函数,由于输入的是字符串,所以需要考虑的情况有很多种。关于验证一个字符串是否为数字,请参见博客:http://www.cnblogs.com/grandyang/p/4084408.html,该博客详细的讨论了各种情况,包括符号,自然数,小数点的出现位置,判断他们是否是数字。那么这道题也应该有这么多种情况。但是这题只需要考虑数字和符号的情况:

1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.

2. 若第一个非空格字符是符号+/-,则标记sign的真假,这道题还有个局限性,那就是在c++里面,+-1和-+1都是认可的,都是-1,而在此题里,则会返回0.

3. 若下一个字符不是数字,则返回0. 完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。

4. 如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返回目前的结果。

5. 还需要考虑边界问题,如果超过了整形数的范围,则用边界值替代当前值。

C++参考答案:

 1 class Solution {
 2 public:
 3     int myAtoi(string str) {
 4         if (str.empty()) return 0;
 5         int sign = 1, base = 0, i = 0, n = str.size();
 6         while (i < n && str[i] ==  ) ++i;
 7         if (str[i] == + || str[i] == -) {
 8             sign = (str[i++] == +) ? 1 : -1;
 9         }
10         while (i < n && str[i] >= 0 && str[i] <= 9) {
11             if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - 0 > 7)) {
12                 return (sign == 1) ? INT_MAX : INT_MIN;
13             }
14             base = 10 * base + (str[i++] - 0);
15         }
16         return base * sign;
17     }
18 };

参考资料:

https://discuss.leetcode.com/topic/2666/my-simple-solution

https://discuss.leetcode.com/topic/15891/8ms-c-solution-easy-to-understand

 

 

 

 

 

 

 

 

 

LeetCode(8):字符串转整数(atoi)

标签:存在   验证   blog   应该   gpo   判断   博客   事先   问题   

原文地址:https://www.cnblogs.com/ariel-dreamland/p/8714906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!