转载

把字符串转换成整数

把字符串转换成整数

题目描述

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

输入描述:

输入一个字符串,包括数字字母符号,可以为空

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

示例1

输入

+2147483647
    1a33

输出

2147483647
    0

解题思路

其实题目挺简单的,但是需要注意数值的溢出

int的数值范围 -2^31 ~ 2^31-1

不建议首先计算出无符号数值,之后根据正负号,转换为正负数

因为如果遇到输入为-2^31, 其无符号数值为2^31,发生溢出,无法复制给int类型变量,造成bug

所以建议直接在循环的时候就给变量赋予正负号

JAVA代码

public class Solution {
    public int StrToInt(String str) {
         boolean first = true;
         int symbol = 0;
         int result = 0;
         //System.out.println(Integer.MAX_VALUE);
         for(int i = 0; i < str.length(); i++) {
             char ch = str.charAt(i);
             if(ch == '+') {
                 if(symbol != 0 || !first) return 0; 
                 symbol = 1; continue;
             }
             if(ch == '-') {
                 if(symbol != 0 || !first) return 0;
                 symbol = -1; continue;
             }
             
             if(ch == '0') {
                 if(first) return 0;
                 if(result < Integer.MAX_VALUE && result > Integer.MIN_VALUE) {
                     result = result * 10; continue;
                 } else return 0;
             }
             
             if(ch > '0' && ch <= '9') {
                 if(symbol == 0) symbol = 1;
                 if(first) first = false; 
                 int digit = ch - '0';
                 
                 if(symbol == 1 && result * 10 <= Integer.MAX_VALUE - digit) {result = result * 10 + digit;continue;}
                 
                 if(symbol == -1 && result * 10 >= Integer.MIN_VALUE + digit) {result = result * 10 - digit; continue;}
                 
                 return 0;
             }
             
             return 0;
         }
         return result;
    }
}

题目链接

正文到此结束
本文目录