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

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

需要考慮的問題:
1). 字符串第一位有沒有符號(hào)捶索,即+,-; 這里假設(shè)沒有(如果有符號(hào)插掂,還需要考慮若只有一個(gè)符號(hào)的情況,也應(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.

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

方法一對(duì)應(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)

方法二對(duì)應(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ù)得到字符對(duì)應(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末僻族,一起剝皮案震驚了整個(gè)濱河市舔痕,隨后出現(xiàn)的幾起案子木柬,更是在濱河造成了極大的恐慌批糟,老刑警劉巖唆貌,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膘茎,死亡現(xiàn)場(chǎng)離奇詭異众弓,居然都是意外死亡业簿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門批狱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)裸准,“玉大人,你說(shuō)我怎么就攤上這事赔硫〕淳悖” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵爪膊,是天一觀的道長(zhǎng)权悟。 經(jīng)常有香客問我,道長(zhǎng)惊完,這世上最難降的妖魔是什么僵芹? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮小槐,結(jié)果婚禮上拇派,老公的妹妹穿的比我還像新娘。我一直安慰自己凿跳,他們只是感情好件豌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著控嗜,像睡著了一般茧彤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疆栏,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天曾掂,我揣著相機(jī)與錄音,去河邊找鬼壁顶。 笑死珠洗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的若专。 我是一名探鬼主播许蓖,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼调衰!你這毒婦竟也來(lái)了膊爪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嚎莉,失蹤者是張志新(化名)和其女友劉穎米酬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趋箩,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淮逻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年琼懊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爬早。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖启妹,靈堂內(nèi)的尸體忽然破棺而出筛严,到底是詐尸還是另有隱情,我是刑警寧澤饶米,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布桨啃,位于F島的核電站,受9級(jí)特大地震影響檬输,放射性物質(zhì)發(fā)生泄漏照瘾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一丧慈、第九天 我趴在偏房一處隱蔽的房頂上張望析命。 院中可真熱鬧,春花似錦逃默、人聲如沸鹃愤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)软吐。三九已至,卻和暖如春吟税,著一層夾襖步出監(jiān)牢的瞬間凹耙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工肠仪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肖抱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓藤韵,卻偏偏與公主長(zhǎng)得像虐沥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泽艘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容