第一,去掉前边的空格,找到第一个不是空格的字符
第二,判断“+”“-”号,用flag来进行标记,是’-‘的话flag=-1,是’+‘的话,flag=1,最后将flag与num值相乘。
第三,判断’+‘’-‘号后边是不是数字,如果不是数字就返回0,如果是数字就将数字存储到res里边。
最后得到的数字在string类型的res里边。将string类型转换成整型,这里要注意溢出的问题,因此将num设置成long long型
for (int j = 0; j < res.size(); ++j) {
num = 10 * num + (res[j] - '0');
if (num - 1 > INT_MAX) {
break;
}
}
边转换边判断num值有没有越界,越界的话直接跳出循环。
class Solution {
public:
int myAtoi(string s) {
int i = 0;
int n = s.length();
string res;
while (s[i] == ' ') {
i++;
}
int flag = 1;
if (s[i] == '-') {
flag = -1;
i++;
}
else if (s[i] == '+') {
i++;
}
if (s[i] < '0' || s[i]>'9') {
return 0;
}
while (i<n&&s[i] >= '0' && s[i] <= '9') {
res = res + s[i];
i++;
}
long long num = 0;
for (int j = 0; j < res.size(); ++j) {
num = 10 * num + (res[j] - '0');
if (num - 1 > INT_MAX) {
break;
}
}
num = flag * num;
if (num < INT_MIN) {
return INT_MIN;
}
if (num > INT_MAX) {
return INT_MAX;
}
return num;
}
};