【剑指 offer】把字符串转成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:输入一个字符串,包括数字字母符号,可以为空
输出描述:如果是合法的数值表达则返回该数字,否则返回0
示例1
输入:+2147483647 输出:2147483647
输入:1a33 输出:0

解题思路

  1. ask码中,字符’0’最小,字符’9’最大;
  2. compareTo的原理理解还是不到位,还需要用字符串测试,现在把compareTo的原码贴上来:
    原理如下:两个字符串value, anotherString
    1. 以短的字符串为准,如果碰到字符不一致,则返回字符相减的结果;
    2. 以短的字符串为准,如果字符一致,则返回两个字符串的长度差。
    public int compareTo(String anotherString) {
            int len1 = value.length;
            int len2 = anotherString.value.length;
            int lim = Math.min(len1, len2);
            char v1[] = value;
            char v2[] = anotherString.value;
            int k = 0;
            while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
            }
            return len1 - len2;
        }
    
  3. 首先对字符串进行判空
  4. 判断输入的字符串是否超过了int可表示对范围,如果超出,直接返回0。
  5. 遍历字符串中的字符,用字符-'0’得到该字符对十进制数。

代码

public class Solution {
    public int StrToInt(String str) {
        if(str == null || str.length() == 0) return 0;
        if((str.charAt(0) == '-' && str.compareTo("-2147483648") > 0) || str.compareTo("2147483647") > 0) return 0;
        int res = 0;
        for(int i = 0; i < str.length(); i++){
            if(i == 0 && (str.charAt(i) == '-' || str.charAt(i) == '+')){
                continue;
            } else {
                if(str.charAt(i) < '0' || str.charAt(i) > '9'){
                    return 0;
                } else {
                    res = res * 10 + (str.charAt(i) - '0');
                }
            }
        }
        if(str.charAt(0) == '-'){
            res = res * (-1);
        }
        return res;
    }
}
发布了77 篇原创文章 · 获赞 1 · 访问量 5409

猜你喜欢

转载自blog.csdn.net/u010659877/article/details/103866302
今日推荐