轉換字符串到整數
(一).""的話返回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;
}
};