实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。
"10" =>10
"-1" => -1
"123123123123123" => 2147483647
"1.0" => 1
class Solution {
public:
/*
* @param str: A string
* @return: An integer
*/
int atoi(string &str) {
// write your code here
int v=0,v1=0;
int u=0;
for(int i=0;i<str.size();i++){
if(str[i]=='.'){
break;
}
if(str[i]=='-'&&v1==0){
str[i]='0';//处理负号
v=1;//为负号做标记
if(u==1){
return 0;
}
u=1;
continue;
}
if(str[i]=='+'&&v1==0){
str[i]='0';
if(u==1){
return 0;
}
u=1;
continue;
}
if(str[i]>=48&&str[i]<=57){
v1=1;
}
}
if(v1==0){
return 0;
}
vector<int> mn;
int m=0;
for(int i=0;i<str.size();i++){
if(str[i]=='.'){
break;
}
if(str[i]==' '){
continue;
}
if(str[i]<48||str[i]>57){
break;
}
if(m==0&&str[i]=='0'){
continue;
}else{
m=-1;
mn.push_back(str[i]-48);
}
}
long long sum=0ll;
if(mn.size()>10){
return 2147483647;
}
for(int i=0;i<mn.size();i++){
sum+=mn[i]*(pow(10,mn.size()-i-1));
}
if(sum<=2147483647&&v==0){
return sum;
}
if(sum<=2147483648&&v==1){
return -sum;
}
if(sum>2147483648&&v==1){//超出负的最大值
return -2147483648;
}
if(sum>2147483647){//超出正的最大值
return 2147483647;
}
}
};