1. 程式人生 > >劍指offer----把字串轉換成整數

劍指offer----把字串轉換成整數

PS:說點題外話,這一題是博主面試網易遊戲,二面的時候問的唯一一道程式設計 題,當時要寫atoi,但是當時並沒有練過這道題,所以當場出了比較多的錯誤 沒寫出來,這個可能給面試官的印象比較差吧(其實整場面試都答的還行,除了 這道程式設計題),以此看來,面試好不好,過不過並不是看你有多強,而是看你是 不是有充分的準備,只要平時練的多,面試就能給人好印象,因為面試大部分 還真的都是原題,做過的題,面試再遇到,出錯的概率很小,能給面試官很好 的印象,至少比那些沒做出來的候選人強是吧,高下立家,你獲勝的概率也就 增大了。沒有進入網易也是一個遺憾,不過知道了自己有很多不足,相信以後 會有機會進入網易的。 題目描述

將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。 輸入描述: 輸入一個字串,包括數字字母符號,可以為空 輸出描述: 如果是合法的數值表達則返回該數字,否則返回0

class Solution {
public:
    int StrToInt(string str) {
        if(str.size()==0)return 0;//為空直接返回
        bool is_minus=false;//標記是否為負數
        //判斷是否有符號位,並去掉符號位
        if(str[0]=='-')
        {
            str=str.substr(1);
            is_minus=true;
        }
        else if(str[0]=='+')
        {
            str=str.substr(1);
        }
        //判斷每個位置是夠都是0-9的數字,如果不是,直接返回0
        for(auto m:str)
        {
            if(m<'0'||m>'9')return 0;
        }
        //long long用來儲存,因為有可能溢位int
        long long sum=0;
        for(auto m:str)
        {
            sum=sum*10+m-'0';
            if(is_minus==false&&sum>INT_MAX)return 0;//如果為正數,大於int_max則溢位,
                                                                                    //返回0
            if(is_minus==true&&-sum<INT_MIN)return 0;//如果為負數,小於int_min則溢位,
                                                                                   //返回0
        }
        return is_minus?-sum:sum;
    }
};