要考虑到的问题有:
1、如何删去前置空格?
isspace()函数 + while循环解决
2、是否为有效的转化?
1)是否存在数字?
如果遇到不是数字就直接返回,这个直接利用char类型的比较方式就可以搞定
如果是就用ret * 10 + x;
x = s[i]-‘0’;
2)是否长度存在?
直接判断
3、如何处理符号?
暂时不知道如何处理加号,对于c++,如果当前存在加号的话,直接向后移动一个就好了,其他的情况不用考虑处理的方式。
4、如何处理越界的数字?
作者:jyd
链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/solution/mian-shi-ti-67-ba-zi-fu-chuan-zhuan-huan-cheng-z-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
int strToInt(string str) {
int n = str.size();
if(n == 0)
return 0;
//1)如果为空字符串就直接返回
int i = 0,s = 1,ret = 0,boundry = INT_MAX /10;
//2)分别标记下标,符号位,返回的值,检查是否越界的值
while(i < n && isspace(str[i]))
i++;//指向第一个不为空格的数字
//检测是否有符号位
if(str[i] == '-'){
s = -1;
i++;
}
else if(str[i] == '+')
i++;
for(int j = i;j < n;j++){
if(str[j] < '0' || str[j] > '9')
break;
if(ret > boundry || (ret == boundry && str[j] > '7') )
return s == 1 ? INT_MAX : INT_MIN;
ret = ret * 10 + (str[j] - '0');
}
return ret*s;
}
};