​题目传送门​


剑指Offer——JZ49.把字符串转换成整数_i++


题解

  • 注意正负问题
  • 面试时,可以选取鲁棒性更好的实现

AC-Code

class Solution {
public:
int StrToInt(string str) {
int num = 0;
bool flag = true; // true:+, false:-
int start = 0;
if(str[0] == '+' || str[0] == '-') {
flag = str[0] == '+';
++start;
}
else if(str[0] <= '0' || str[0] >= '9')
return 0;
for(int i = start; i < str.length(); ++i) {
if(str[i] <= '0' || str[i] >= '9')
return 0;
num = num * 10 + str[i] - '0';
}
return num * (flag ? 1 : -1);
}
};
  • 更鲁棒代码
class Solution {
public:
int StrToInt(string str) {
const int len = str.length();
if (len == 0) return 0;
int i = 0;
while (i < len && str[i] == ' ') { ++i; } // 排除开头的空格
if (i == len) return 0;
if (!isdigit(str[i]) && str[i] != '+' && str[i] != '-') return 0;
bool neg = str[i]=='-' ? true : false;
i = isdigit(str[i]) ? i : i+1;
long long ans = 0L;

while (i < len && isdigit(str[i])) {
ans = ans * 10 + (str[i++]-'0');

if (!neg && ans > INT_MAX) {
ans = INT_MAX;
break;
}
if (neg && ans > 1L + INT_MAX) {
ans = 1L + INT_MAX;
break;
}
}
if (i != len) return 0; // 不要此处,就是atoi()库函数的实现
return !neg ? static_cast<int>(ans) : static_cast<int>(-ans);
}
};