字符串转整数
这里我们主要需要考虑的就是内存越界问题,对于内存越界我们基本的思路就是将比较往前提一个周期。
class Solution {
public:
int myAtoi(string str) {
int res = 0;
int left;
int flag = 1;
int i = 0;
//去除空格
for(i;i<str.length();i++) {
if(str[i] == ’ ') {
continue;
}
break;
}
//判断符号
if(i<str.length()) {
// 这里以为多个±组合也可以
// while(i<str.length()) {
// if(str[i] == ‘-’) {
// flag *= -1;
// i++;
// }
// else if(str[i] == ‘+’) {
// i++;
// }
// else {
// break;
// }
// }
if(str[i] == '-') {
flag *= -1;
i++;
}
else if(str[i] == '+') {
i++;
}
if(('a' <= str[i] && 'z' >= str[i]) || ('A' <= str[i] && 'Z' >= str[i])) {
return 0;
}
}
for(i;i<str.length();i++) {
// 字符
if(('a' <= str[i] && 'z' >= str[i]) || ('A' <= str[i] && 'Z' >= str[i]) || str[i] == ' ' || str[i] == '.' || str[i] == '+' || str[i] == '-') {
break;
}
left = int(str[i] - '0') * flag;
//越界
if(left <= 0 && (INT_MIN - left)/10 >res) {
return INT_MIN;
}
if(left >= 0 && (INT_MAX - left)/10 <res) {
return INT_MAX;
}
res = res*10 + left;
// for test
// cout << res << endl;
}
return res;
}
};```