8. String to Integer (atoi)
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Analysis:
这道题确实不太好做,很难想到那么全面。
参考:http://blog.csdn.net/ljiabin/article/details/40508889
学了个新函数:
cout<<std::numeric_limits<int>::max()<<endl; int最大值
cout<<std::numeric_limits<int>::min()<<endl; int最小值
Source Code(C++):
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution {
public:
int myAtoi(string str) {
if (str.empty()){
return 0;
}
//去除前边的空格
while(str.at(0) == ' '){
str.erase(0, 1);
}
//判断正负号并取出前边的有效数字
string::size_type k;
int start_pos = 0;
int num_sign=0;
if (str.at(0)=='+' || str.at(0)=='-') {
k=str.find_first_not_of("0123456789", 1);
start_pos = 1;
num_sign = str.at(0)=='+' ? 1:-1;
}
else {
k=str.find_first_not_of("0123456789");
start_pos = 0;
num_sign = 1;
}
if (k==string::npos){
k=str.size();
}
//转换为数字
long long num=0;
for (int i=start_pos; i<k; i++){
num = num*10 + num_sign*(int)(str.at(i)-'0');
if (num>(int)2147483647 || num<(int)-2147483648){ //此处不加(int)会出错,应该是计算机内部数据存储方式的问题,可尝试/*cout << (long long)-2147483648;*/
return num>0 ? 2147483647:-2147483648;
}
}
return num;
}
};
int main() {
Solution sol;
cout << sol.myAtoi("+1");
cout << sol.myAtoi("10.10");
cout << sol.myAtoi("010");
cout << sol.myAtoi("+-0");
cout << sol.myAtoi(" 1a33");
cout << sol.myAtoi("-21474836486");
return 0;
}