题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
样例
输入
+2147483647
1a33
输出
2147483647
0
思路
《剑指offer》P244
考虑到以下几种情况:
- 正负号
- 边界(最大正整数,最小负整数)
- 特殊输入:空串,非数字字符
code
class Solution {
public:
bool InvalidFlag = false;
int StrToInt(string str) {
// 判断输入是否非空
int res = 0;
if (str.empty()){
InvalidFlag = true;
return 0;
}
// 先判断符号
int index = 0;
int sign = 1;
if (str[index] == '-'){
sign = -1;
index ++;
}
else if (str[index] == '+') index ++;
// 转换为整数
res = sign * ConvertToInt(str, index);
if (InvalidFlag)
cout << "invalid";
return res;
}
int ConvertToInt(string str, int index) {
int result = 0;
for (int i = index; i < str.size(); ++i) {
if (str[i] >= '0' && str[i] <= '9') {
result = result * 10 + (str[i] - '0');
//考虑是否溢出的情况
if (result > 0x7FFFFFFF) {
InvalidFlag = true;
return 0;
}
}
else {
InvalidFlag = true;
return 0;
}
}
return result;
}
};