字符串转整型与整型转字符串的区别_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python&R语言-python和r相遇

    Python&R语言-python和r相遇前言  如果你是数据分析领域的新兵,那么你一定很难抉择——在进行数据分析时,到底应该使用哪个语言,R还是Python?在网络上,也经常出现诸如“我想学习机器语言,我应该用哪个编程

    2022年7月5日
    24
  • 前端 — HTML

    前端 — HTML1.HTML结构1.1HTML文件基本结构<html><head><title>第一个html程序</title></head><body>helloworld!</body></html>html标签是整个html文件的根标签(最顶层标签)head标签中写页面的属性.body标签中写的是页面上显示的

    2022年5月5日
    39
  • 打开redis远程访问端口_linux端口开放命令

    打开redis远程访问端口_linux端口开放命令一、问题详情最近我在阿里云ESC上购买了一台服务器,但是在安装完redis后,我在本地的电脑上怎么也没法调用这台服务器上面的redis服务。最后,我终于解决了,所以来记录一下。二、解决方案想要解决这个问题,前提条件是已经在阿里云的安全组设置里面已经开放了3679这个端口。接着我们要修改两个配置文件。redis.conf尽量将最初始的redis.conf复制一份,防止以后修改该配置文件出现问题。 执行修改配置文件的命令 vim/opt/myRedis/redis.co

    2025年11月24日
    3
  • java integer最小值_db2integer最大值

    java integer最小值_db2integer最大值来自:https://blog.csdn.net/qq_33611068/article/details/77369050有这样一道题:编程测试,遍历0到int所能表示最大的正数,将消耗的时间打印。下面是我的代码:1inttemp=0;2Datedt1=newDate();3longbegintime=dt1.getTime();4for(inti=0;i<=…

    2025年10月8日
    3
  • Ubuntu20.04环境下安装pip过程遇到问题总结「建议收藏」

    Ubuntu20.04环境下安装pip过程遇到问题总结「建议收藏」今天新装了Ubuntu环境,需要开发Python的代码,需要装一些环境,在安装过程中pip的安装总是出现问题,尝试了很多的方法才成功,下面把我遇到的问题做一下总结:Ubuntu环境如下:下载包的路径在文章末尾问题1:无法定位软件问题:解决办法:修改Ubuntu的软件源就能解决无法定位软件包的问题问题2:安装setuptools报错问题解决办法:执行命令:sudo apt-get install python3-distutils结果如下:正在读取软件包列表… 完成正在分析软件包的

    2022年8月11日
    7
  • 图片懒加载原理及实现(java懒加载原理)

    一,前置知识1,为什么要图片懒加载懒加载是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不是一次性加载所有图片,当需要显示时,再发送图片请求,避免打开网页时加载过多资源。当一个网站的加载图片过多时就需要懒加载的协助,页面图片多时,在首次载入时一次性加载会耗费时间长,使用懒加载可以使页面加载速度快、减轻服务器的压力、节省流量。如下图:随着滚轮滚动,底部的图片会被不断地加载,从而显示在页面上,也就是说懒加载其实就是按需加载,当页面需要显示图片的时候才进行加载,否则不加载

    2022年4月16日
    68

发表回复

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

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