写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
思路:
模拟,从头扫描,如果一开始遇到空格,跳过,如果是非数字字符和加减号,则直接返回0。如果遇见加减号和数字字符,则开始记录数字。再次遇到非数字字符则停止扫描。
代码:
class Solution {
public:
bool isStart(char c) {
if(c >= '0' && c <= '9' || c == '+' || c == '-') {
return true;
}
return false;
}
bool isValidDigit(char c) {
if(c >= '0' && c <= '9') {
return true;
}
return false;
}
int strToInt(string str) {
string validInt;
bool begin = false;
bool isSub = false;
for(char c: str) {
if(begin == false && c == ' ') {
continue;
}
if(begin == false && !isStart(c)) {
return 0;
}
if(begin == false && isStart(c)) {
if(c == '-') {
isSub = true;
}
begin = true;
if(c == '-' || c == '+') {
continue;
}
}
if(begin && isValidDigit(c)) {
validInt.push_back(c);
}
if(begin && !isValidDigit(c)) {
break;
}
}
long long ans = 0;
int len = validInt.size();
for(int i = 0;i < len;i++) {
ans = ans * 10 + (validInt[i] - '0');
if(ans > (long long)INT_MAX) {
return isSub == true ? INT_MIN : INT_MAX;
}
}
ans = isSub == true ? -ans:ans;
return ans;
}
};