题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
没有考虑大数问题,假设数字在int能表示的范围内。附上我的第一感觉思路:代码臭且长,,
public class Solution {
public int StrToInt(String str) {
if(str.length()==0)
return 0;
char []cc=str.toCharArray();
boolean flag=false;
int []dd=new int[str.length()];
if(cc[0]=='+' ||cc[0]=='-')
{
flag=true;
for(int i=1;i<str.length();i++){
if(cc[i]>='0' && cc[i]<='9') //若首位为符号位,则从第二位字符开始存起来
dd[i-1]=cc[i]-48; //48为‘0’对应的ASCII码
else
return 0;
}
}
else{
for(int i=0;i<str.length();i++){
if(cc[i]>='0' && cc[i]<='9')
dd[i]=cc[i]-48;
else
return 0;
}
}
int sum=dd[0];
for(int i=1;i<str.length()-1;i++){
sum=sum*10+dd[i];
}
if(flag){
if(cc[0]=='+')
return sum;
//if(cc[0]=='-')
else
return -sum;
}
else
{
sum=sum*10+dd[str.length()-1];
return sum;
}
}
}
看了别人的思路改的,精简了很多,可读性较好
public class Solution {
public int StrToInt(String str) {
if(str.length()==0)
return 0;
int sum=0;
char [] cc=str.toCharArray();
int s=1;
if(cc[0]=='-')
s=-1;
for(int i=(cc[0]=='+' || cc[0]=='-')?1:0;i<str.length();i++){//有可能前面有+或者-号,
// 这个写法很秒
if(cc[i]>='0' &&cc[i]<='9')
sum=sum*10+cc[i]-'0';//0-9字符对应的ASCII码并不是0-9,需要转换一下,‘0’对应的ASCII码是48,
//但是不一定记得,所以-‘0’是最方便的方法。
else
return 0;
}
sum=s*sum;
return sum;
}
}