# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.8 如何判断字符串是否为整数
题目:
写一个方法,检查字符串是否是整数,如果是整数,那么返回其整数值。
分析:
最关键的地方是:
1) 负数可以有负号,且必须位于第一个;正数可以有正号,也可以没有,如果有
必须是位于第一个
2) 对负号判定完之后,后面只能是数字,且不能出现除了数字外的任何符号,
例如小数点
3) 计算值
假设当前位为num,之前的计算结果为result
result = result * 10 + num
+123
-123
123
都是符合要求的
关键:
参考:
Python程序员面试算法宝典
'''
def toInt(string):
if not string:
return False, None
size = len(string)
multiply = 1
haveSymbol = False
if '-' == string[0]:
multiply = -1
haveSymbol = True
elif '+' == string[0]:
haveSymbol = True
if haveSymbol:
begin = 1
else:
begin = 0
numSet = set([str(i) for i in range(0, 10)])
result = 0
for i in range(begin, size):
if string[i] not in numSet:
return False, None
num = ord(string[i]) - ord('0')
result = result * 10 + num
result *= multiply
return True, result
def process():
string = '123'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
string = '+123'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
string = '-123'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
string = '12+3'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
string = '+1.23'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
string = '++123'
flag, result = toInt(string)
if flag:
print result
else:
print "invalid string"
if __name__ == "__main__":
process()