题目详情
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。
请完成函数StrToInt,实现字符串转换成整数的功能。
友情提醒:
提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?
当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)
input: output:
注:以上只是部分测试数据,不代表上述数据通过了,即挑战成功。
答题说明
完成功能函数StrToInt即可,但不要去改动函数名,参数,至于main函数是为方便你在提交代码之前进行在线编译测试;
不得用库函数atoi。
我提交的代码:
public static int StrToInt(String str)
{
int d = 0;
// filter 1: "" " " "++" "--" "+ " "- "
if (str == null || "".equals(str.trim()) || str.indexOf("++")>=0
|| str.indexOf("--")>=0 || str.indexOf("+ ")>=0 || str.indexOf("- ")>=0) {
return d;
}
str = str.trim();
// filter 2: only number
Character cur = null;
StringBuffer sb = new StringBuffer();
for(int i=str.length()-1;i>0;i--){
cur = str.charAt(i);
if ( cur < '0' || cur > '9' ){
sb = new StringBuffer();
continue;
}
sb.insert(0,cur);
}
// the first char: + or - or number or other
int flag = 1;
if (str.charAt(0)=='-'){
flag = -1;
}else if(str.charAt(0)=='+'){
// nothing
}else if( str.charAt(0)>='0' && str.charAt(0)<='9'){
sb.insert(0, str.charAt(0));
}else{
sb = new StringBuffer();
}
if (sb.length()<1){
return d;
}
// border value
try{
long dd = Long.parseLong(sb.toString()) * flag;
if (dd>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
if(dd
return Integer.MIN_VALUE;
}
}catch(Exception e){
e.printStackTrace();
}
// str to int
int f = 10;
int i=sb.length()-1;
d = sb.charAt(i)-'0';
while(--i>=0){
d += (sb.charAt(i)-'0') * f;
f = f * 10;
}
return d * flag;
}