题目描述
实现atoi函数。
题目分析
首先判断第一位正负号问题,然后其次每一位是否是数字。
代码
class Solution {
public:
int myAtoi(std::string str) {
long long int flag = 1;
long long int rs = 0;
unsigned i = 0;
for ( ; i < str.length(); ++i) {
if (str[i] != ' ' && str[i] != 't') {
break;
}
}
if (i < str.length() && str[i] == '+') {
i++;
} else if (i < str.length() && str[i] == '-') {
flag = -1LL;
i++;
}
for ( ; i < str.length(); ++i) {
if (str[i] >= '0' && str[i] <= '9') {
rs *= 10LL;
rs += (long long int)(str[i] - '0');
} else {
break;
}
if (rs != int(rs)) {
if (flag > 0) {
rs = 0x7fffffff;
} else {
flag = 1;
rs = 0x80000000;
}
break;
}
}
return rs * flag;
}
};
总结
判断顺序:
- 判断前导空;
- 判断正负号;
- 判断是否为数字;
- 判断结果是否溢出。
近期评论