面試題67:字符串轉(zhuǎn)換為整數(shù)

題目:
將一個字符串轉(zhuǎn)換成一個整數(shù),要求不能使用字符串轉(zhuǎn)換整數(shù)的庫函數(shù)。 數(shù)值為0或者字符串不是一個合法的數(shù)值則返回0

輸入描述:
輸入一個字符串,包括數(shù)字字母符號,可以為空
輸出描述:
如果是合法的數(shù)值表達則返回該數(shù)字,否則返回0

思路:
這道題本身不難,但是需要仔細考慮各個特殊情況,正常情況下,遍歷字符串,首先判斷第一個是不是符號,如果是的話需要進行flag的標記,然后累加求得整數(shù)值,特殊情況如下:
1.只有一位,那么只能為數(shù)字;
2.字符串為空;
3.字符串中出現(xiàn)了非法的字符。

此外為了分辨是字符0轉(zhuǎn)換成數(shù)字0,還是不合法返回0,需要一個類變量IsRight來進行標記分辨。

代碼實現(xiàn):

# -*- coding:utf-8 -*-
class Solution:
    IsRight = 1  #類變量
    def StrToInt(self, s):
        # write code here
        if not s:
            IsRight = 0   #不合法為0
            return 0
        label = 1  #正負數(shù)標志
        sum = 0
        nums = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
        #特殊情況 只有一位
        if len(s)==1:
            if s[0] not in nums:
                self.IsRight = 0
                return 0
        for i in range(len(s)):
            if i == 0:
                if s[i] == '+':
                    continue
                elif s[i] == '-':
                    label = -1
                    continue
            if s[i] in nums:
                sum = sum*10 + nums.index(s[i])  #轉(zhuǎn)換成數(shù)字
            else:    #出現(xiàn)非法字符
                sum = 0
                self.IsRight = 0
                break
        result = sum*label  #判斷是否超出邊界
        if result > (2**32)-1 or result < -(2**32):
            self.IsRight = 0
            return 0
        else:
            return result

提交結果:

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容