Solution 20: 字符串转整数问题

问题描述

输入一个表示整数的字符串,把该字符串转成整数输出。

 

解决思路

考虑如下情况:

(1) 符号位;

(2) 是否溢出?溢出后的处理;

(3) 对于不合法的输入的处理。

 

程序

1. 假设输入合法

public class Atoi {
public int transToInt(String s) {
	if (s == null || s.length() == 0) {
		 return 0;
	}

	boolean pos = true;
	int i = 0;
	char bc = s.charAt(0);
	
	if (bc == '+' || bc == '-') {
		++i;
		pos = bc == '-' ? false : true;
	}
	
	s = s.substring(i); // remove begin sign
	int sum = 0;
	int base = 10;
	
	for (i = 0; i < s.length(); i++) {
		sum = sum * base + (s.charAt(i) - '0');
	}
	
	return pos ? sum : -sum;
}
}

 

2. 假设输入不一定合法

public int transToIntCheckIllegal(String s) throws Exception {
	if (s == null || s.length() == 0) {
		 return 0;
	}

	boolean pos = true;
	int i = 0;
	char bc = s.charAt(0);
	
	if (bc == '+' || bc == '-') {
		++i;
		pos = bc == '-' ? false : true;
	}
	
	s = s.substring(i); // remove begin sign
	long sum = 0;
	int base = 10;
	
	for (i = 0; i < s.length(); i++) {
		char c = s.charAt(i);
		if (!(c >= '0' && c <= '9')) {
			throw new Exception("Error: Illegal input!");
		}
		sum = sum * base + (c - '0');
	}
	
	if (pos && sum >= Integer.MAX_VALUE) {
		return Integer.MAX_VALUE;
	}
	if (!pos && -sum <= Integer.MIN_VALUE) {
		return Integer.MIN_VALUE;
	}
	
	return (int) (pos ? sum : -sum);
}

 

posted @ 2015-07-08 10:06  Chapter  阅读(125)  评论(0编辑  收藏  举报