lintcode 轉換字符串到整數

轉換字符串到整數 

實現atoi這個函數,將一個字符串轉換爲整數。如果沒有合法的整數,返回0。如果整數超出了32位整數的範圍,返回INT_MAX(2147483647)如果是正整數,或者INT_MIN(-2147483648)如果是負整數。

樣例

"10" =>10

"-1" => -1

"123123123123123" => 2147483647

"1.0" => 1

分析:這道題需要考慮的情況有點多,我自己花四十分鐘做的通過率爲百分之80。這裏有個最要注意的地方是對於“     123abc”這樣的字符串,返回的是123。而如果第一個非空非正負符號的字符不是數字,就返回0.總共可能的情況如下

(一).""的話返回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;
    }
};

轉換字符串到整數 







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章