1. 程式人生 > >劍指Offer(4)——字串轉整數

劍指Offer(4)——字串轉整數

題目描述:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0
注意:這個題目條件給的比較全面,如果一個題只告訴我們要字串轉整數,我們也要注意問題的全面程度。

class Solution:
    def strChageint(s):
        if s == '':
            print (0)       #print 主要是為了看結果,正常做的時候可以去掉
            return 0
        else:
            num = 0
            for index, c in
enumerate(s): if c not in ['0','1','2','3','4','5','6','7','8','9'] : print ('存在非法字元') return 0 else: num = num + int(c) * (10**(len(s)-1-index)) print (num) return num pro = Solution() pro.strChageint('097867'
)

題目升級:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0
輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0
示例1
輸入
+2147483647
1a33
輸出
2147483647
0

思路:
可以使用ord函式,利用ASCII表來幫助我們將字元轉換成數字,我發現‘0’在ASCII表上對應的十進位制數是48,那麼ord(‘0’) -48我們就可以得到對應的數字了。
但是需要注意的是,字串開頭可能會是符號

# -*- coding:utf-8 -*-
class Solution: def StrToInt(self, s): if s =='': return 0 n = 0 for i in range(len(s)): if i == 0 and (s[i] == '+' or s[i] == '-'): continue if s[i] not in ['0','1','2','3','4','5','6','7','8','9']: return 0 n += (ord(s[i]) - 48) * (10 ** (len(s) - 1 - i)) if s[0] == '-': return (0-n) else: return n