Leetcode 剑指系列 Day 26 字符串
1.剑指 Offer 20. 表示数值的字符串
解题思路:
状态机
2.剑指 Offer 67. 把字符串转换成整数
解题思路:
步骤:
1.跳过空格
2.判断符号
3.先用(long)temp进行计算,若在范围内,则转为(int)型
//没有越界判断的版本
class Solution {
public:
int strToInt(string str) {
int length = str.size();
int ans = 0, pos = -1, signal = 1;
//跳过字符串的空格
while(str[++pos] == ' ');
//开始非空格字符串部分的遍历
//判定符号,signal为1表示正,-1表示负
if(str[pos] == '+' || str[pos] == '-'){
if(str[pos++] == '-') signal = -1;
}
for(int i = pos; i < length; i++){
if(str[i] <= '9' && str[i] >= '0'){
ans *= 10;
ans += str[i] - '0';
}
else break;
}
ans *= signal;
return ans;
}
};
//越界判断的版本,用long判断
class Solution {
public:
int strToInt(string str) {
int length = str.size();
int ans = 0, pos = -1, signal = 1;
long temp;
//跳过字符串的空格
while(str[++pos] == ' ');
//开始非空格字符串部分的遍历
//判定符号,signal为1表示正,-1表示负
if(str[pos] == '+' || str[pos] == '-'){
if(str[pos++] == '-') signal = -1;
}
for(int i = pos; i < length; i++){
if(str[i] <= '9' && str[i] >= '0'){
temp = ans;
temp *= 10;
temp += (str[i] - '0') * signal;
if(temp >= INT_MIN && temp <= INT_MAX) ans = temp;
else{
if(signal == 1) return INT_MAX;
else return INT_MIN;
}
}
else break;
}
return ans;
}
};