为什么80%的码农都做不了架构师?>>>
题目详情
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"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 otherint 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 valuetry{long dd = Long.parseLong(sb.toString()) * flag;if (dd>Integer.MAX_VALUE){return Integer.MAX_VALUE;}if(dd<Integer.MIN_VALUE){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;}