题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
样例
输入 +2147483647
1a33
输出 2147483647
0
0
思路分析
题目描述过于简单了,对于边界条件,难道让做题者猜测吗(手动滑稽)
1.省略字符开头空格
2.保留负号
3.若含有字母,返回0
5.大数或负大数,输出其值
代码
public int StrToInt(String str) {
if (str.length()==0 || str == "") {
return 0;
}
StringBuffer s = new StringBuffer();
long b = 0;
int sign = 1;
for (int i = 0; i < str.length(); i++)
{
if (str.charAt(i) != ' ') {
s.append(str.charAt(i));
}
}
if (s.charAt(0) !='+' && s.charAt(0) !='-' && s.charAt(0) <'0' && s.charAt(0) >'9') {
return 0;
}
if (s.charAt(0) =='+' || s.charAt(0) =='-') {
sign = (str.charAt(0) == '+' ? 1 : -1);
}
if (s.charAt(0) >'0' && s.charAt(0) <'9') {
b = s.charAt(0)-'0';
}
for (int i = 1; i < s.length(); i++)
{
int a =s.charAt(i) - '0';
if (a<0 || a>9) {
return 0;
}
b = b*10 + a;
}
return (int)b*sign;
}
结果