转换字符串到整数
(一).""的话返回0。
(二).字符串两边有空格自动屏蔽,有小数点小数点后面的内容舍弃。
(三)."+123"和"123"效果一样。
(四)."a...","-h..."这种,除了符号位只要非数字打头,返回0。
(五)."123gdah3423","-123ff777"这种返回123,-123。
(六).超了范围之后,判断正负性。
先上自己部分正确的代码,现在是第五条不满足条件,有时间修改一下
9.14更新,代码通过,就是有点乱。。
class Solution {
public:
/*
* @param str: A string
* @return: An integer
*/
private:
bool Sign=true;//判断正负
public:
int atoi(string &str) {
// write your code here
int num=0,i=0;
long sum=0;
int p=0;//判断第一个符号位
bool no_zero=false;//遇到第一个非0
bool no_blank=false;
for(;i<str.size();i++)
{
if(!no_blank&&str[i]==' ')//检查头部空格
{
continue;
}
no_blank=true;
if((p==0)&&(str[i]=='+'||str[i]=='-'))//检查头部符号
{
p++;
if(str[i]=='+')
Sign=true;
else if(str[i]=='-')
Sign=false;
continue;
}
if((str[i]-'0'<0||str[i]-'0'>9)&&str[i]!='.')//去除非小数点字符
{
if(Sign)
return (int)sum;
else
return 0-(int)sum;
}
if((no_zero)&&str[i]=='.')//遇到小数点且前面的数字不是0
{
if(Sign)
return (int)sum;
else
return 0-(int)sum;
}
if(!no_zero&&str[i]=='0')//去掉第一个非0数前的0
{
continue;
}
else
{
p++;
no_zero=true;//走到这里一定不是0;
sum=sum*10+(str[i]-'0');
num++;
}
if(num==10)
{
if((Sign==true)&&(sum>2147483647))
{
return INT_MAX;
}
if((Sign==false)&&(abs(sum)>2147483648))
{
return INT_MIN;
}
}
if(num>10)
{
if(Sign==true)
return INT_MAX;
if(Sign==false)
return INT_MIN;
}
}
if(Sign)
return (int)sum;
else
return 0-(int)sum;
}
};
转换字符串到整数