剑指offer:Python 把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:输入一个字符串,包括数字字母符号,可以为空
输出描述:如果是合法的数值表达则返回该数字,否则返回0
示例:
输入
+2147483647
1a33

输出
2147483647
0

思路及Python实现

用正则表达式

import re
class Solution:
    def StrToInt(self, s):
        if s == "":
            return 0
        ret = re.search(r"^([+-])?\d+$", s)
        if not ret or ret.group() == "-2147483649" or ret.group() == "2147483648":
            return 0
        else:
            return int(ret.group())

利用码值来求解

class Solution:
    def StrToInt(self, s):
        if s == "" or s == "-2147483649" or s == "2147483648":
            return 0
        flag = 1  # 标明正负的符号
        wei = 0  # 位数指针
        num = 0  # 结果
        if s[0] in "+-":
            if s[0] == "+":
                flag = flag
            else:
                flag *= -1  # 如果是-,就将flag变成-1
            s = s[1:]  # 将第一个符号,去除
        for i in range(len(s) - 1, -1, -1):  # 从后往前遍历字符串
            if s[i] not in "0123456789":  # 先检查是否合法
                return 0
            else:  # 结果加上当前字符*位数
                # 字符“0”对应的ASCII码为48。对获得的字符串中的每个字符,
                # 求其ASCII码,减去48即为对应位上的数值。
                num += (ord(s[i]) - 48) * (10 ** wei)
                wei += 1  # 位数每遍历一个字符,就要进一位
        return num * flag  # 注意正负号
发布了146 篇原创文章 · 获赞 37 · 访问量 7871

猜你喜欢

转载自blog.csdn.net/storyfull/article/details/103535822