本文共 1080 字,大约阅读时间需要 3 分钟。
实现 atoi
,将字符串转为整数。
提示:仔细考虑所有输入情况。如果你想挑战自己,请不要看下面并自己考虑所有可能的输入情况。
说明:这题解释的比较模糊(即没有指定输入格式)。你得事先汇集所有的输入情况。
atoi的要求:
这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或负号后面跟随尽可能多的数字,并将其解释为数字的值。
字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。
如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包含空白字符则不进行转换。
如果不能执行有效的转换,则返回 0。如果正确的值超过的可表示的范围,则返回 INT_MAX(2147483647)或 INT_MIN(-2147483648)。
说明:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
思路:这题思路特别简单,就是坑特别多,列举如下:
1、空空空+156空X7
2、空空空-156空X7
3、空空空156空X7
4、空空空+X156空X7
5、“ ”
6、“”
只有1、2、3能得到正确的值,其他的情况都是0.
除此之外题目中说假设我们的环境只能存储 32 位有符号整数,所以还要注意越界。
class Solution {public: int myAtoi(string str) { int i=0, flag=1, re=0; while(isspace(str[i])) ++i; if(str[i]=='+') i++; else if(str[i]=='-'){//加else为了避免出现"+-765这种情况" i++; flag=-1; } for(int j=i; jINT_MAX/10 || (re==INT_MAX/10 && int(str[j]-'0')>7)) return flag==1 ? INT_MAX :INT_MIN; re=re*10+int(str[j]-'0'); } return re*flag; }};
转载地址:http://fhabi.baihongyu.com/