8. String to Integer (atoi)

题目描述

实现一个将字符串转化为一个整数的函数

思考过程

  1. 先考虑都会有什么可能的输入情况
    1.1 合法输入,如:“213”,“+1”,“0”,“-3”
    1.2 非法输入,如小数:“1.2”;分数:“3/2”;字符:“abc”,“a1”,“1a”;空字符:“ asdfa fasdfgdfg”
  2. 所以应当先判断输入是否合法,非法则不执行转换
  3. int:max=2147483647,min=-2147483648

字符串相关函数:

  1. length():字符串长度
  2. indexOf()、lastIndexOf():确定字符串位置
  3. equals():字符串比较
  4. charAt():得到指定位置的字符
  5. getChars():得到字符串的一部分字符串
  6. subString():提取字符串的另一种方法,它可以指定从何处开始提取字符串以及何处结束
  7. replace():将字符串中的一个字符替换为另一个字符
  8. concat():把两个字符串合并为一个字符串
  9. toUpperCase()和toLowerCase():分别实现字符串大小写的转换
  10. trim():将字符串中开头和结尾处的空格去掉(本题适用)
  11. valueOf():将任何类型的数据对象转换为一个字符串
  12. append():在字符串后面追加
  13. insert():在字符串中间插入
  14. setCharAt():改变某个位置所在的字符
  15. 查看更多java字符串操作…

char和int的转换:

  1. int 转换成char:
int  n = 1;
char ch = (char)(n + '0');

这样打印出来ch的值为1;
不过需要注意(因为char只有一个字节),此处的n只能是0-9之间的字符

  1. char转int:
 char ch = '9';
int n = int(ch) - int('0');

此处ch也是‘0’至‘9’的数字字符

遇到的问题:

  1. char转换string?
    答:""+char即可转为string
  2. char转换int?
    答:见上面
  3. 如何匹配0-9数字?
    答:可以使用正则表达式,设置模板进行匹配,如:
String reg="0|1|2|3|4|5|6|7|8|9";
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
boolean result=m.find();
  1. 如果字符串不是合法int类型,应该return什么?
    答:有多少是合法的就输出多少合法的,尽可能的解析

  2. 对于超出int上下限的数值如何处理?
    答:截断处理,即超出范围的均输出最大或者最小值

  3. 如何获得int的最大最小值?
    答:Integer.MAX_VALUE和Integer.MIN_VALUE

提交状态:

  1. Runtime Error
    原因:没有考虑到输入字符串为空的情况
    解决方法:
if(len==0){
        return 0;
 }
  1. Wrong Answer
    原因:对于类似的不合法字符串,期待输出是尽可能的解析,自己的理解不到位,对于不合法字符串都输出了0

Input:" -0012a42"
Output:0
Expected:-12

解决方法:修改return,尽可能解析

  1. Wrong Answer
    原因:int上下限没有处理

Input:"2147483648"
Output:-2147483648
Expected:2147483647

解决方法:将result类型由int转为long,并在return之前进行数值大小是否溢出的判断

long result=0;
...
if(PandN==1 && result>2147483647){
    return 2147483647;
}else if(PandN==(-1) && -1*result<-2147483648){
    return -2147483648;
}else{
    return PandN*(int)result;
}
  1. Wrong Answer
    原因:上次考虑了int上下溢出的问题,但是没有考虑long上下溢出的问题

Input:"9223372036854775809"
Output:1
Expected:2147483647

解决方法:将判断尺寸语句内置在每次循环中,实时判定,只要超出int范围,立即截断输出

  1. Accepted

你可能感兴趣的:(8. String to Integer (atoi))