class Solution {
public:
int myAtoi(string str) {
bool isNeg = false;
long long ret = 0;
int i = 0;
while (isspace(str[i])) ++i; //跳过所有空格
//如果第一个有效字符既不是正负号也不是有效数字,返回0
if (!isdigit(str[i]) && str[i] != '+' && str[i] != '-') return 0;
if (str[i] == '+' || str[i] == '-') {
if (!isdigit(str[i+1])) return 0; //正负号后必须是有效数字
if (str[i] == '-')
isNeg = true;
++i;
}
for (; i < str.size(); ++i) {
if (isdigit(str[i]))
ret = ret * 10 + (str[i]-'0');
else
break;
if (ret > (unsigned long long)INT_MAX)
return isNeg ? INT_MIN : INT_MAX;
}
return isNeg ? -(int)ret : (int)ret;
}
};
测试
int main() {
Solution sol;
cout << sol.myAtoi("+1") << endl;
cout << sol.myAtoi("+-2") << endl;
cout << sol.myAtoi("-1123b") << endl;
cout << sol.myAtoi("355") << endl;
cout << sol.myAtoi("-0012ab34") << endl;
return 0;
}
参考:http://bangbingsyb.blogspot.jp/2014/11/leetcode-string-to-integer-atoi.html