题目描述:
Implement atoi to
convert a string to an integer.
解题思路:
题目并不难,主要是要考虑各种各样的输入,以及数值超出int范围的情况。
AC代码如下:
class Solution {
public:
int myAtoi(string str) {
long long int ans = 0;
int tag = 0; //表示是否已经出现过非空字符,包括'0'-'9'以及'+'或'-'
int flag = 0; //表示数值的正负
if (str[0] == '-'){
flag = 1;
tag = 1;
}
if (str[0] == '+'){
flag = 2;
tag = 1;
}
for (int i = 0; i < str.size(); i++){
if ((flag == 1 && i == 0) || (flag == 2 && i == 0)){
continue;
}
else if ((ans == 0 && str[i] == ' ') || (ans == 0 && str[i] == '\t')){
if (tag == 0)
continue;
else
return 0;
}
else if (ans == 0 && str[i] == '-'){
if (flag == 0){
flag = 1;
tag = 1;
continue;
}
else
{
return 0;
}
}
else if (ans == 0 && str[i] == '+'){
if (flag == 0){
flag = 2;
tag = 1;
continue;
}
else{
return 0;
}
}
else{
if (str[i] >= '0' && str[i] <= '9'){
tag = 1;
ans = ans * 10 + str[i] - '0';
if ((flag == 0 || flag == 2) && ans>(numeric_limits<int>::max)())
return (numeric_limits<int>::max)();
if (flag == 1 && -1 * ans <(numeric_limits<int>::min)())
return (numeric_limits<int>::min)();
}
else{
if (flag == 1)
return -ans;
else
return ans;
}
}
}
if (flag == 1) return -ans;
return ans;
}
};