Description:
Implement function atoi to convert a string to an integer.
If no valid conversion could be performed, a zero value is returned.
If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
Note:
主要就是写了个preprocessor抠细节。。
Implement function atoi to convert a string to an integer.
If no valid conversion could be performed, a zero value is returned.
If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
Note:
主要就是写了个preprocessor抠细节。。
Code:
class Solution {
string preprocessor(string str) {
int i = 0;
string result;
for (; i < str.size(); i++) {
if (str[i] >= '0'&&str[i] <= '9') {
break;
}
else if (str[i] == '+') {
for (++i; i < str.size(); i++) {
if (str[i] >= '0'&&str[i] <= '9')
break;
else if (str[i] == '-') {
return "0";
}
}
break;
}
else if (str[i] == '-') {
for (++i; i < str.size(); i++) {
if (str[i] >= '0'&&str[i] <= '9') {
result += '-';
break;
}
else if (str[i] == '+') {
return "0";
}
}
break;
}
}
for (; i < str.size(); i++) {
if (str[i] >= '0'&&str[i] <= '9')
result += str[i];
else
break;
}
//cout << result << endl;
return result;
}
public:
/*
* @param str: A string
* @return: An integer
*/
int atoi(string &str) {
// write your code here
long tmp=0;
if (str.empty())
return 0;
str=preprocessor(str);
if (str[0] != '-'&&str.size() > 10)
return INT_MAX;
if (str[0] == '-'&&str.size() > 11)
return INT_MIN;
int i = 0;
if (str[i] == '-')
++i;
for (; i < str.size(); i++) {
tmp = tmp * 10 + str[i] - '0';
}
if (str[0] != '-'&&tmp >= 2147483647)
return INT_MAX;
if (str[0] == '-'&&tmp >= 2147483648)
return INT_MIN;
if (str[0] == '-')
return -tmp;
return tmp;
}
};