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


相关推荐

  • Idea激活码最新教程2022.2版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2022.2版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2022 2 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2022 2 成功激活

    2025年5月25日
    3
  • 常说的手机刷新率60Hz、120Hz有什么不同?

    常说的手机刷新率60Hz、120Hz有什么不同?在很长一段时间里,手机的刷新率都是60Hz,随着硬件设备性能的提升,各种高刷新率的移动设备层出不穷,移动端也能有120Hz的显示设备。那么手机上的游戏真的是FPS越高越好吗?本期我们就来…

    2022年5月22日
    53
  • Linux防火墙详解「建议收藏」

    Linux防火墙详解「建议收藏」防火墙介绍inux防火墙主要工作在网络层,属于典型的包过滤防火墙。在RHEL中常用的有两种火墙工具iptables和firewalld,但软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核netfilter完成的。netfilterIP信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在Lin

    2022年9月22日
    2
  • IDEA2021.5.1-2038激活码激活【在线注册码/序列号/破解码】「建议收藏」

    IDEA2021.5.1-2038激活码激活【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    54
  • kl1083_显示器dpi是什么意思

    kl1083_显示器dpi是什么意思Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有多少个 Windy 数?输入格式共一行,包含两个整数 A 和 B。输出格式输出一个整数,表示答案。数据范围1≤A≤B≤2×109输入样例1:1 10输出样例1:9输入样例2:25 50输出样例2:20#include<bits/stdc++.h>using namespace std;

    2022年8月9日
    8
  • Linux挂载磁盘出现只读的问题

    Linux挂载磁盘出现只读的问题由于挂载的是windows下使用的磁盘,是NTFS分区格式,使用mount查看当前挂载的设备,发现磁盘/dev/sdb2属性为ro,也就算readonly,使用如下命令修复即可:sudontfsfix/dev/sdb2修复成功出现NTFSpartition/dev/sda2wasprocessedsuccessfully.然后再修改磁盘读写属性:(好像也可以不改属性,使用unmount卸载掉磁盘后再挂载磁盘即可)mount-orw/dev/sda2/mnt/sda2参

    2022年6月19日
    24

发表回复

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

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