链接
https://leetcode-cn.com/problems/string-to-integer-atoi/
题意
将字符串转换成整数。只是附加条件比较多。
- 忽略开头空格字符
- 第一个非空格字符不是一个 有效整数字符、字符串为空 或 字符串仅包含空白字符,返回 0 0 0
- 第一个非空字符为 正负号 或者 数字 ,将该符号与之后面尽可能多的连续数字组合起来
- 有效的整数部分之后也可能会存在 多余的字符,忽略它们
- 在任何情况下,函数不能进行有效的转换时,返回 0。(eg: “+” “+-2”)
思路
按指示编程。
我写了一份,虽然也能成,但是感觉不够简洁。于是去看了其他人的代码,这才叫代码啊。
AC代码
看完大佬的代码后写的
class Solution {
public:
int myAtoi(string str) {
int f = 1;
int pos = 0;
int ans = 0;
int n = str.size();
while(str[pos] == ' ') pos++;
if(pos >= n) return 0;
if(str[pos] == '-') f = -1;
if(str[pos] == '+' || str[pos] == '-') pos++;
while(pos < n && isdigit(str[pos])) {
int tmp = str[pos] - '0';
if(ans > INT_MAX/10 || (ans == INT_MAX/10 && tmp > 7)) {
return f > 0 ? INT_MAX : INT_MIN;
}
ans = ans*10 + tmp;
pos++;
}
return f > 0 ? ans : -ans;
}
};
之前写的
class Solution {
public:
int myAtoi(string str) {
int pos = 0, n = str.size();
while(pos < n && str[pos] == ' ') pos++;
if(pos == n || !((str[pos] >= '0' && str[pos] <= '9') || str[pos] == '-' || str[pos] == '+')) return 0;
int f = 1;
if(str[pos] == '-') {
f = -1;
pos++;
}
else if(str[pos] == '+') pos++;
if(pos >= n || !(str[pos] >= '0' && str[pos] <= '9')) return 0; // "+" ""+-2"
int st = pos;
while(pos < n && (str[pos] >= '0' && str[pos] <= '9')) pos++;
int ed = pos;
pos = st;
int ans = f * (str[pos]-'0');
pos++;
while(pos < ed) {
int tmp = (str[pos]-'0');
if(ans > 0 && (ans > 214748364 || (ans == 214748364 && tmp > 7))) return INT_MAX;
if(ans < 0 && (ans < -214748364 || (ans == -214748364 && tmp > 8))) return INT_MIN;
ans = ans*10 + tmp*f;
pos++;
}
return ans;
}
};