将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能

题目描述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。
数值为0或者字符串不是一个合法的数值则返回0。

输入描述:

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

输出描述:

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

知识点:

在ASCLL码中字符‘0’ 对应的编码是 48(十进制),依次’1’对应49,‘1’ ~ ‘9’对应48 ~ 57,但是整数1就是等于1。‘1’ – ‘0’ = 1,可以看做49 -48 =1;同理‘7’ – ‘0’ =7 ,对应 58 -49
= 7;
疑问: 为什么返回的是整型 不是字符?
自己的思路: 要明白在ASCLL码表中’1’对应的是二进制,对应的二进制转对应十进制是49,‘-’
这个操作是字符的二进制编码的相减,结果为二进制(计算机是以二进制进行存储),注意结果为二进制0000
0001就是十进制1,此时1是整型而不是字符(与ASCLL码已经无关了)

编程注意事项

编程过程最重要就是注意边界划分
依次遍历并截取字符串,只要截取字符相减‘0’大于9(整数),字符就不是数字(ASCLL码小于48的字符相减小于0,当然小于9),然后乘于10的n次方,结果相加。
字符串“123”依次读取的‘1’,‘2’,3,1 * 100+ 2 *10 + 3 *1(10的0次方)
为了方便边界划分我是从后向前遍历的。
所以获取的最后一个为“+” 或“-”(如果有“+”和 “-”),判断为‘+’ 直接返回结果num。(此时不会对 ‘+’ 进行操作’),’-‘直接返回-num

代码

 public int StrToInt(String str) {
	int num = 0;
        int n = 0;
    
	for (int i = str.length() - 1; i >= 0; i--) {
		char c = str.charAt(i);
		if ((c - '0') > 9) {
			return 0;
		}
        if(c == '+'){
            return num;
        }
        if(c == '-'){
            return -num;
        }
		num = num + (c - '0') * (int) Math.pow(10, n);
        n ++;
	}
	return num;
}
点赞