1. 程式人生 > >8.、String to Integer (atoi)(字串轉整)

8.、String to Integer (atoi)(字串轉整)

題目要求,就是實現一個atoi函式的功能,將字串轉換成整數。其中,這個題目難度不大,就是有些邊界條件要考慮。
1、資料型別,這個題也要考慮變數的資料型別,因為輸出整數的範圍是[−2^31, 2^31 − 1]。並且,當轉換結果超出了該範圍,即當大於( 2^31 − 1)時,結果則為( 2^31 − 1);若小於(−2^31),則為(−2^31)。
2、在遇見有效數字之前,若出現‘-’,‘+’,‘ ’,‘0’~‘9’之外的字元,則返回0。
3、忽略有效數值之後的字元。
基本上就是這寫要求,其中,在做題的時候,自己所遇到的一個錯誤就是,轉換後的數值超過了給定的數值範圍,所以在遍歷的時候,加上了判定條件,一旦數值大於(2^31),則跳出。程式碼如下所示:

C++:

@by_chandepire
int myAtoi(string str)
{
    long long result=0;
    long long max = ((long long)1<<31)-1;
    long long min = 0 - (1 << 31);
    bool sign = 0;
    bool start = 0;
    int len = str.size();
    for(int i=0;i<len && result <= max ;++i)
    {
        if(start == 0
) { if(str[i] == ' ') continue; else if(str[i] == '-') { sign = 1; start = 1; } else if(str[i] == '+' ) start = 1; else if(str[i] >= '0' && str[i] <= '9') { start = 1
; result = result * 10 + (str[i] - '0'); } else break; } else { if(str[i] >= '0' && str[i] <= '9') result = result * 10 + (str[i] - '0'); else break; } } result *= (sign)?-1:1; if(result > max) return max; else if(result < min) return min; return result; }

python:

@by_chandepire
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        result = 0
        max = (1<<31)-1
        min = -(1<<31)
        sign = 1
        start = 0
        length = len(str)
        str1 = str.lstrip()
        for s in str1:
            if not start:
                if s == '-':
                    sign = -1
                    start = 1
                elif s == '+':
                    start = 1
                elif s >= '0' and s <= '9':
                    start = 1
                    result = result * 10 + (ord(s) - ord('0'))
                else:
                    break
            else:
                if s >= '0' and s <= '9':
                    result = result * 10 + (ord(s) - ord('0'))
                else:
                    break
            if result > max:
                break
        result = result * sign
        if result > max:
            return max
        elif result < min:
            return min
        return result