剑指Offer 49 把字符串转换成整数

题目描述

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

思路

  1. 其实这道题就是要考虑周全就行,首先是字符串的鉴别啊,“+”和“-”的判别,然后我就写多了。。。。

    代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    static public int StrToInt(String str) {
    if (str==null||str.length()==0) //null和空字符串检验
    return 0;
    char [] a = str.toCharArray(); //消耗点空间呗
    if (a[a.length-1]<'0'||a[a.length-1]>'9') //检查最后一个字符是否不是数字
    return 0;
    boolean flag = true; //加法还是减法
    int number=0; //假发或者减法第二项
    int result = 0; //结果
    for (int i = 0; i < a.length;i++) { //写的难看的for循环
    while (a[i]!='+'&&a[i]!='-') { //计算第二项
    if (a[i]>'9'||((a[i]<'0')&&(a[i]!='+'||a[i]!='-')))//检测
    return 0;
    number = number * 10 + a[i] - '0';
    i++;
    if (i>a.length-1)
    break;
    }
    if (i>=a.length-1) //到尾了
    {
    if (flag) //flag用于判断前一个符号是+还是-
    result += number;
    else if (flag==false)
    result-=number;
    break;
    }
    if (i<a.length&&a[i]=='+')
    {
    if (flag)
    result += number;
    else if (flag==false)
    result-=number;
    flag = true;
    number = 0;
    }
    if (i<a.length&&a[i]=='-')
    {
    if (flag)
    result += number;
    else if (flag==false)
    result-=number;
    flag = false;
    number = 0;
    }
    }
    return result;
    }

收获

  1. 永远不要小看题目
  2. 永远不要小看面试官,人家比你溜得多;