字符串转整型与整型转字符串的区别_java字符串转换成整数

字符串转整型与整型转字符串的区别_java字符串转换成整数面试中被问到了这个问题,当时答得不太好,没有考虑全面,回来总结一下,如有遗漏,欢迎指正。知道C语言中有2个函数atoi()和 itoa(),但对具体实现不是很清楚,现在自己总结实现一下:字符串转整型这个情况稍微复杂一些,要考虑全面字符串开始有空格,要先判断过滤‘ 123’存在符号'+'和'-'要判断存在小数点,也就是’123.45’转为整型是123字符串超过整型int

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

面试中被问到了这个问题,当时答得不太好,没有考虑全面,回来总结一下,如有遗漏,欢迎指正。

知道C语言中有2个函数atoi()和 itoa(),但对具体实现不是很清楚,现在自己总结实现一下:

字符串转整型

这个情况稍微复杂一些,要考虑全面
  1. 字符串开始有空格,要先判断过滤‘  123’
  2. 存在符号'+'和'-'要判断
  3. 存在小数点,也就是’123.45’转为整型是123
  4. 字符串超过整型int的范围,就转为int表示最边缘的数
  5. 存在不合法的字符串‘+-123’则转为-,‘123 456’’转为123,

整型转字符串

也要考虑全面,分析各种情况
首先要考虑正负号,然后倒序(a%10)的方式转成字符串,最后判断符号,倒序输出

/*
把字符串转换成整型数  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");

}


更新于2017.9.13

上述的方法s=”-2147483648″,超出整数最小范围的结果不对,做如下改进:

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;	    }}


总结,遇到问题要先思考个1分钟,考虑清楚了再动手写,不能慌张!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180315.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月19日 下午12:00
下一篇 2022年10月19日 下午12:00


相关推荐

  • 视频录制软件哪个好,推荐几款简单实用的视频课件录制软件「建议收藏」

    视频录制软件哪个好,推荐几款简单实用的视频课件录制软件「建议收藏」  日常生活中,我们有时候会因为工作或学习的原因,会使用到一些视频录制软件,通过视频录制软件,我们可以记录一些错过的细节,提高学习或工作效率。当然,现在网上的视频录制软件那么多,到底视频录制软件哪个好用?下面,小编给大家几款视频录制软件,感兴趣的朋友就一起来看看吧。   一、微软录屏软件(MicrosoftSnip)  1、软件介绍:  MicrosoftSnip是微软最新…

    2022年6月16日
    38
  • jbpm工作流 php,jBPM工作流组件

    jbpm工作流 php,jBPM工作流组件jBPM工作流组件如下图所示-1.开始事件它是该过程的起始节点。每个进程只有一个启动节点。此节点仅包含一个没有任何传入连接的传出连接。它具有以下属性:Id:节点的ID,它也应该是独一无二的。Name:节点的名称。2.结束事件它是流程的结束节点。进程可以包含多个End事件。此节点仅包含一个传入连接,不包含传出连接。它具有以下属性:Id:节点的ID,它也应该是独一无二的。Name:节点…

    2025年10月17日
    4
  • 算法—时间复杂度[通俗易懂]

    算法—时间复杂度[通俗易懂]附录log对数:等差数列什么是等差数列?一般地,如果一个数列从第2项起,后一项与它的前一项的差等于同一个常数,那麽这个数列就叫做等差数列。这个常数叫做等差数列的公差,公差通常用字母d表示。例1:初识。-{1,3,5,7,9}公差为2-{5,15,25,35,45}公差为10-{2,68,134,200,266}公差为66-{5…

    2022年5月14日
    54
  • 两数之和,两数之积

    两数之和,两数之积已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积。 甲问乙:”你知道是哪两个数吗?”乙说:”不知道”; 乙问甲:”你知道是哪两个数吗?”甲说:”也不知道”; 于是,乙说:”那我知道了”; 随后甲也说:”那我也知道了”; 这两个数是什么?答案:答案1:为x=1,y=6;甲知道和A=x+y=7,乙知道积B=x*y=6 答案2:为x=1,y=8;甲知道和A=

    2022年5月20日
    40
  • 国内较好用可以替代Midjourney或Stable Diffusion的图像生成工具有哪些

    国内较好用可以替代Midjourney或Stable Diffusion的图像生成工具有哪些

    2026年3月15日
    2
  • Anycast

    AnycastAliDNS(www.alidns.com)近期上线。看到同事说更换localDNS后,访问淘宝明显快了。以我当前的理解能力,认为无非是快在DNS解析这一步上,缩短的时间应该在毫秒级别,而浏览器与淘宝集群之间的延时应该不会有变化。但试了后,果然明显感觉变快了。好奇心驱使,学习了下Anycast技术。当然,AliDNS还采用了集群缓存共享的设计…

    2022年5月24日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号