[python3] 67 將字符串轉(zhuǎn)化為數(shù)字

題目描述:實(shí)現(xiàn)類似c中atoi()函數(shù)的功能,將一個(gè)字符串轉(zhuǎn)化為數(shù)字。如字符串'123'轉(zhuǎn)化為123.

需要考慮的問題:
1). 字符串第一位有沒有符號,即+,-; 這里假設(shè)沒有(如果有符號,還需要考慮若只有一個(gè)符號的情況,也應(yīng)該返回0并設(shè)置為非法輸入)
2). 字符串前后有沒有空格;若首尾有空格,使用strip()函數(shù)去除;去除左側(cè)空格,用lstrip();去除右側(cè)空格,用rstrip()
3). 若輸入字符串為空,則返回0;此時(shí)需要考慮,若輸入字符串也為0的情況。
4). 若輸入的字符串越界,則應(yīng)該將最終的數(shù)字限定在整數(shù)范圍內(nèi)。

方法1:'123' 轉(zhuǎn)化為數(shù)字,則為 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 123,因此可以從字符串后面向前面遍歷,從而得到具體的和;

方法二:也可以從前向后遍歷,當(dāng)遍歷第一個(gè)字符 '1' 時(shí),假設(shè)只有這一位數(shù)字,則為數(shù)字 num = 1;再向后遍歷到第二個(gè)字符 '2',此時(shí)前面已經(jīng)有一個(gè)數(shù)字 1 了,此時(shí)的數(shù)字應(yīng)為num = num * 10 + 2 = 12;再向后遍歷到第三個(gè)字符 '3',此時(shí)前面已經(jīng)有數(shù)字num = 12了,此時(shí)的數(shù)字應(yīng)為num = num * 10 + 3 = 12 * 10 + 3 = 123.

對應(yīng)的代碼如下:

方法一對應(yīng)的代碼:

# stringToInt_1.py

def stringToInt_1(inputStr):
    # 定義一個(gè)全局變量status,若輸入字符串為'0',則返回?cái)?shù)字0,并且status置為true;若輸入字符串為空,則返回?cái)?shù)字0,且status置為false
    status = True
    if inputStr == "":
        status = False
        return 0, status
    inputStr.strip()
    num = 0
    j = 0
    for i in range(len(inputStr) - 1, -1, -1):
        if inputStr[i] >= '0' and inputStr[i] <= '9':
            num += (ord(inputStr[i]) - ord('0')) * (10 ** j)
            j += 1
        else: #若遇到'0'-'9'之外的字符,num設(shè)置為0,且直接退出
            status = False
            num = 0
            break
    if num > 2**32 - 1: #若轉(zhuǎn)換后的數(shù)字越界,則應(yīng)該將轉(zhuǎn)換后的數(shù)字限定為最大值
        num = 2**32 - 1
    return num, status

if __name__ == "__main__":
    inputStr = '123'
    num, status = stringToInt_1(inputStr)
    print("num = ", num, ", status = ", status)

方法二對應(yīng)的代碼:

#stringToInt.py

def stringToInt(inputStr):
    # 定義一個(gè)全局變量status,若輸入字符串為'0',則返回?cái)?shù)字0,并且status置為true;若輸入字符串為空,則返回?cái)?shù)字0,且status置為false
    status = True
    if inputStr == "":
        status = False
        return 0, status
    inputStr.strip() # 去掉輸入字符串首尾的空格
    num = 0
    for inputStrs in inputStr:
        if inputStrs > '0' and inputStrs < '9':
            num = num * 10 + ord(inputStrs) - ord('0') #ord函數(shù)得到字符對應(yīng)的ASCII碼值
        else: #若遇到'0'-'9'之外的字符,num設(shè)置為0,且直接退出
            status = False
            num = 0
            break       
    if num > 2**32 - 1: #若轉(zhuǎn)換后的數(shù)字越界,則應(yīng)該將轉(zhuǎn)換后的數(shù)字限定為最大值
        num = 2**32 - 1
    return num, status

if __name__ == "__main__":
    inputStr = '123'
    num, status = stringToInt(inputStr)
    print("num = ", num, ", status = ", status)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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