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