將整數數字字串轉為整數值

2021-10-02 01:37:45 字數 2207 閱讀 7413

給定乙個字串s,如果s符合日常書寫的整數形式,並屬於32位整數的範圍,返回s代表的整數,否則返回0.例如

首先檢查s是不是日常書寫形式的整數:

def

check

(s):

if s is

none

orlen

(s)==0:

return

false

ifnot s[0]

.isdigit(

)and s[0]

!='-'

:return

false

if s[0]

=='-'

and(

len(s)==1

or s[1]

=='0'):

return

false

if s[0]

=='0'

andlen

(s)!=1:

return

false

for c in s[1:

]:ifnot c.isdigit():

return

false

return

true

若檢查失敗直接返回0

否則逐個數字識別並計算數值,注意32位整數範圍是[0x7fffffff, 0x80000000].

def

convert

(s):

ifnot check(s)

:return

0 num =

0 positive, i =

(true,0

)if s[0]

!='-'

else

(false,1

) overflow =

0x80000000

for c in s[i:]:

a =ord(c)

-ord

('0')if

(num > overflow//10)

or(num == overflow//

10and a > overflow %10)

:return

0 num = num*

10+ a

if num == overflow and positive:

return

0return num if positive else

-num

def

test_convert()

:assert

(convert('')

==0)assert

(convert(

'-')==0

)assert

(convert(

'-0')==

0)assert

(convert(

'--')==

0)assert

(convert(

'-012')==

0)assert

(convert(

'-x')==

0)assert

(convert(

'x')==0

)assert

(convert(

'123x')==

0)assert

(convert(

'0123')==

0)assert

(convert(

'0')==0

)assert

(convert(

'123')==

123)

assert

(convert(

'-123')==

-123

)assert

(convert(

'2147483647')==

2147483647

)assert

(convert(

'2147483648')==

0)assert

(convert(

'-2147483648')==

-2147483648

)print

('done'

)if __name__ ==

'__main__'

: test_convert(

)

字串之將整數字串轉成整數值

字串之將整形字串轉成整數值,並且屬於32位整數範圍 str 123 返回 123 str 012 不符合書寫習慣,所以返回0 str a12 返回0 str 0 返回 0 str 214783647 返回 214783647 str 214783647 因為溢位了,所以返回 0 package co...

C語言將字串轉為整數

1 c語言有atoi atol atof等庫函式,可分別把ascii編碼的字串轉化為int long float型別的數字。需要注意的是,這個幾個函式是c語言提供的擴充套件功能,並不是標準的函式,必須引入標頭檔案 include 若需要移植性,請用sscanf函式。例如 int num atoi 1...

實現 atoi,將字串轉為整數。

實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...