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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89874341

题目:


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


思路一:

将字符串里的每一个数字字符取出来,然后高位的乘10的相应幂,然后依次的相加,若是负数的话,最后求个反,由于

int  类型的正数,最大是:-2147483648-2147483647 ,所以如果字符串是-2147483648,则直接输出。因为正数最大2147483647



代码:

public int StrToInt(String str) {
        if (str.length()==0||str==null) {
			return 0;
		}
		int len=str.length()-1;
		int sum=0;
		int sum_1=0;
		int sum_2=-2147483648;//特殊情况
		//如果首位为+和-的情况
		if (str.charAt(0)=='+'||str.charAt(0)=='-') {
			for (int i = 1; i < str.length(); i++) {
				if (str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9) {
					sum+=(str.charAt(i)-'0')*Math.pow(10, len-i);//依次将她的高位10乘以相应的幂
				}else {
					return 0;
				}
			}
			
			
		}
		//如果首位不是以+或者-开头
        if (str.charAt(0)-'0'>=0&&str.charAt(0)-'0'<=9) {
			for (int i = 0; i < str.length(); i++) {
				if (str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9) {
					sum_1+=(str.charAt(i)-'0')*Math.pow(10, str.length()-1-i);
				}else {
					return 0;
				}
			}
		}
        if (str.equals("-2147483648")) {
			return sum_2;
		}
		if (str.charAt(0)=='+') {
			return sum;
		}
		if (str.charAt(0)=='-') {
			 return -1*sum;
		}
		if (str.charAt(0)-'0'>=0&&str.charAt(0)-'0'<=9) {
			return sum_1;
		}
		
		return 0;
}

思路二:其实就是上面代码的简化版

嫌麻烦的可用下面的,下面这个要记住字符串的ASCII码变换

public int StrToInt(String str) {
  
		int i=0;
		int flag=1;
		int sum=0; 
		if (str.length()==0||str==null) {
			return 0;
		}
		if (str.length()==1&&(str.charAt(0)=='+'||str.charAt(0)=='-')) {
			return 0;
		}
		if (str.charAt(i)=='+') {
			i++;
		}
		if (str.charAt(i)=='-') {
			i++;
			flag=-1;
		}
		for (; i < str.length(); i++) {
			if (str.charAt(i)-'0'<0||str.charAt(i)-'0'>9) {
				return 0;
			}else {
				sum=sum*10+str.charAt(i)-'0';
			}
			
		}
		return sum*flag;
	}

猜你喜欢

转载自blog.csdn.net/u012429555/article/details/89874341