1.本题知识点
char转int,int范围
2. 题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
3. 思路
这题要考虑全面。
注意点如下:
① 参数校验,空字符串和是否合法数字(即小于等于’9’,大于等于’0’;)
②符号位处理。
③ int类型为4字节32位,判断溢出。
④ 使用错误标识枚举。
还需要注意:char转int的处理,直接强转会转为ASCII码。
Java版本:
package com.algorithm.str;
public class Str2Int {
enum Status{ KVaild,KInvalid};
static Status g_Status = Status.KInvalid;
public static void main(String[] args) {
System.out.println(strToInt("222"));
System.out.println(Str2Int.g_Status.values()[0].ordinal());
}
static int strToInt(String s)
{
if (s == null) {
return 0;
}
int result = 0;
int i = 0, len = s.length();
boolean negative = false;
int limit = -Integer.MAX_VALUE;
int digit;
char[] chars = s.trim().toCharArray();
if (len > 0) {
char firstChar = chars[0];
if (firstChar < '0')
{
if (firstChar == '-') {
negative = true;
limit = Integer.MIN_VALUE;
}
else if (firstChar != '+'){
return 0;
}
if (len == 1) return 0;
i++;
}
while (i < len) {
if (chars[i] > '9' || chars[i] < '0') {
return 0;
}
digit = (int) (chars[i] - '0');
result *= 10;
if (result < limit + digit) {
return 0;
}
result -= digit;
i++;
}
}
else {
return 0;
}
g_Status = Status.KVaild;
return negative?result:-result;
}
}