49、把字符串转换成整数

一、题目

题目描述

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

输入描述:

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

输出描述:

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

输入

+2147483647
    1a33

输出

2147483647
    0

二、解法

 1 public class Solution {
 2    /* public int StrToInt(String str) {
 3          if(str.equals("") || str.length() == 0)
 4                 return 0;
 5             char[] a = str.toCharArray();
 6             int fuhao = 0;
 7             if(a[0] == '-')
 8                 fuhao = 1;
 9             int sum = 0;
10             for(int i = fuhao; i < a.length;i++){
11                 if(a[i] == '+')
12                     continue;
13                 if(a[i]<48 || a[i]>57)
14                     return 0;
15                 sum = sum*10 + a[i]-48;
16             }
17             return fuhao == 0 ? sum : sum*-1;
18         
19     }*/
20     // 设置一个全局变量,来判断:当输出为0时,是字符串输入异常还是输入字符串为'0'
21     public static boolean flag;
22     public int StrToInt(String str) {
23         flag = false;
24         //判断输入是否合法
25         if(str == null || str.trim().equals("")){
26             flag = true;//输入异常
27             return 0;
28         }
29         //symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位
30         int symbol = 0;
31         int start = 0;//start等于1表示第一位是符号位
32         char[] chars = str.trim().toCharArray();
33         if(chars[0] == '+'){
34             start = 1;
35         }else if(chars[0] == '-'){
36             start = 1;
37             symbol = 1;
38         }
39         int result = 0;
40         for(int i = start; i < chars.length; i++){
41             if(chars[i] > '9' || chars[i] < '0'){
42                 flag = true;//输入异常
43                 return 0;
44             }
45             result = result*10+chars[i]-48;
46             if(symbol == 0 && result > Integer.MAX_VALUE){
47                 flag = true;//输入异常
48                 return 0;
49             }
50             if(symbol == 1 && result < Integer.MIN_VALUE){
51                 flag = true;//输入异常
52                 return 0;
53             }
54         }
55         return symbol==0?result:result*(-1);
56     }
57 }

 

posted @ 2017-08-31 19:50  fankongkong  阅读(300)  评论(0编辑  收藏  举报