大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
面试中被问到了这个问题,当时答得不太好,没有考虑全面,回来总结一下,如有遗漏,欢迎指正。
知道C语言中有2个函数atoi()和 itoa(),但对具体实现不是很清楚,现在自己总结实现一下:
字符串转整型
- 字符串开始有空格,要先判断过滤‘ 123’
- 存在符号'+'和'-'要判断
- 存在小数点,也就是’123.45’转为整型是123
- 字符串超过整型int的范围,就转为int表示最边缘的数
- 存在不合法的字符串‘+-123’则转为-,‘123 456’’转为123,
整型转字符串
/*
把字符串转换成整型数 atoi()
*/
int str2int(char s[]) {
int temp=0;
int flag=1;
int i=0;
while(i<sizeof(s)&&s[i]==' ')
i++;
if(s[i]=='+'||s[i]=='-') {
if(s[i]=='-')
flag=-1;
i++;
}
while( s[i]>='0'&&s[i]<='9') {
temp=temp*10+(s[i]-'0');
i++;
if(temp<0) { //超出int范围-2147483648~2147483647
temp=2147483647;
break;
}
}
return flag*temp;
}
/*
把整数转换为字符串 itoa()
*/
void int2str(int temp,char s[]) {
int flag=1;
if(temp<0) {
temp=-temp;
flag=-1;
}
int i=0;
while(temp>0) {
s[i]=temp%10+'0';
i++;
temp=temp/10;
}
if(flag==-1)
s[i++]='-';
s[i]='/*
把字符串转换成整型数 atoi()
*/
int str2int(char s[]) {
int temp=0;
int flag=1;
int i=0;
while(i<sizeof(s)&&s[i]==' ')
i++;
if(s[i]=='+'||s[i]=='-') {
if(s[i]=='-')
flag=-1;
i++;
}
while( s[i]>='0'&&s[i]<='9') {
temp=temp*10+(s[i]-'0');
i++;
if(temp<0) { //超出int范围-2147483648~2147483647
temp=2147483647;
break;
}
}
return flag*temp;
}
/*
把整数转换为字符串 itoa()
*/
void int2str(int temp,char s[]) {
int flag=1;
if(temp<0) {
temp=-temp;
flag=-1;
}
int i=0;
while(temp>0) {
s[i]=temp%10+'0';
i++;
temp=temp/10;
}
if(flag==-1)
s[i++]='-';
s[i]='\0';
for(int j=i-1; j>=0; j--)
printf("%c",s[j]);
printf("\n");
}
';
for(int j=i-1; j>=0; j--)
printf("%c",s[j]);
printf("\n");
}
更新于2017.9.13
public class StrToInt { public static void main(String[] args) { // TODO Auto-generated method stub String s=" -2147483648"; System.out.println(strToint(s)); } public static int strToint(String str) { char []s=str.toCharArray(); int flag=1,sum=0; if(s.length==0) return 0; int i=0; while(i<s.length && s[i]==' ') i++; if(i<s.length && (s[i]=='-'||s[i]=='+')){ if(s[i]=='-') flag=-1; i++; } while(i<s.length && s[i]>'0'&&s[i]<'9') { sum=sum*10+(s[i]-'0'); if(sum<0 && flag==1){ return Integer.MAX_VALUE; } if(sum<0 && flag==-1){ return Integer.MIN_VALUE; } i++; } return flag*sum; }}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180315.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...