题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路: 注意输入数据的合法性,例如“1234+12”,“12@@#*24”,这样的都是不合法数值,要返回0的。但是如果第一个字符时+或-时是可以的,且影响最后输出的符号,最后还要判断下数字是否超出了范围。比如数字 “-91283472332” 超过 32 位有符号整数范围-2147483648。 因此返回-2147483648。
C++
class Solution {
public:
int StrToInt(string str) {
int len = str.size();
if (len == 0) return 0;
long long num = 0;
bool tag = true;
if (str[0] == '-') tag = false;
for (int i = (str[0] == '+' || str[0] == '-' ? 1 : 0); i < len; i++ )
{
if (str[i] >= '0' && str[i] <= '9')
num = num * 10 + (str[i] - '0');
else
{
num = 0;
break;
}
}
num = tag ? num : (-num);
//比如数字 "-91283472332" 超过 32 位有符号整数范围-2147483648。
//因此返回-2147483648
if(num > INT_MAX || num < INT_MIN)
return 0;
return num;
}
};
参考
https://www.cnblogs.com/silentteller/p/12084105.html