题意:给出一个字符串,将其转换为整数
取整规则
1.如果整数超出int的范围则返回最大值或者最小值(-2147483648~2147483647)
2.字符串的开始可以有空格,如" -1234"
3.如果遇到不符合规则的字符串则返回当前已经计算的值,如果一开始就不符合则返回0,如" -+=1234"返回0,"-2324def2"返回-232.
整体大概就这些规则,只要注意一下就OK了
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
class Solution {
public:
int myAtoi(string str) {
int i,j=0;
int flag = 1;
int len;
long long temp,result=0;
len = str.size();
for(i=j;i<=(len-1);i++)//去掉字符串开头的空格
{
if(str[i] == ' ')
j++;
if(str[i] != ' ')
break;
}
if(str[j]=='-')//根据除空格的第一位字符判断为正还是为负,默认为正.
{
flag = -1;
j++;
}
else if(str[j]=='+')
{
flag = 1;
j++;
}
for(i=j;i<=(len-1);i++)//从数字开始循环,从j开始,j之前是空格或者正负号
{
if(str[i]<'0'||str[i]>'9')//如果遇到不符合的数则返回前面已经计算出来的数,如果整体都不符合整数规则返回0
{
if(flag==1&&result/10>2147483647)//如果超出整数的范围则返回最大值或者最小值
return 2147483647;
if(flag==-1&&result/10>2147483648)
return -2147483648;
return result*flag/10;
}
temp = str[i]-'0';
result+=temp;
if(flag==1&&result>2147483647)//如果超出整数的范围则返回最大值或者最小值
return 2147483647;
if(flag==-1&&result>2147483648)
return -2147483648;
if(i!=(len-1))
result*=10;
}
return result*flag;
}
};
int main()
{
string s = " -1010023630o4";
Solution test;
int num;
num = test.myAtoi(s);
cout<<num<<endl;
return 0;
}