C语言库函数实现 XtoX系列: itoa atoi atof

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39087263/article/details/80186780

1.itoa  

功能:把整型转换为字符串 int to string

头文件: stdlib.h

函数原型: char*itoa(int value,char*string,int radix);

函数实现:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void itoa_1(int num,char str[])
{
	int sign; //设置一个标志,当Num为负数时候先取反。稍后再计算
	int i=0;//设置下标
	int j;//逆置时需要用到
	if ((sign=num)<0)
	{
		num = -num;
	}
	while(num>0)//-123
	{
		str[i++]=num%10+'0';
		num=num/10;
	}
	if(sign<0)
	{   
		str[i++]='-';
	}
		str[i]='\0';
	for(int j=i-1;j>=0;j--)   //生成的数字是逆序的,所以要逆序输出  
	{ printf("%c",str[j]);}
}
int main()
{
	int num=-12345;
	char str[100];
	itoa_1(num,str);
	printf("%s",itoa(-123456,str,10));//源函数测试
	getchar();
	return 0;
}

2.atoi

功能:把字符串转换为整型 string to int

头文件: stdlib.h

函数原型: int atoi(const char *nptr);

函数实现:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
//将字符串转换为整型,遇到非数字字符 结束(包括/0)
int atoi_1(const char * str)
{
	return (int)strtol(str,NULL,10);
}
int main()
{
	char *str1="-12345";
	printf("%d",atoi_1(str1));
        getchar();
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
int atoi_2(const char * str)
{
	assert(NULL != str);//思索了好久,第一位为0允许,遂判读地址不为空
	int num = 0;
	int sign = 0;
	while ('0' == *str ||' ' == *str||'\n' == *str || '-' == *str || '+' == *str)//如果有空,空格或者换行跳过去
	{
		if (*str=='-')//如果为负数,先保存符号
			sign = 1;
		str++;
	}
	//未使用isdigit的方法
	//while (*str>='0' && *str<='9')//只要0-9这部分ASCll
	//{
	//    num = num*10 + *str - '0';// '0'是数字48 ,减去后得到对应的数字类型
	//    str++;
	//}
	while(*str!=0)
	{
		if(isdigit(*str))
		{
			num = num*10 + *str - '0';// '0'是数字48 ,减去后得到对应的数字类型
			str++;
		}
	}

	if (sign == 1)//为1得到负数
		return -num;
	else
		return num;
}
int main()
{
	char *str1="-12345";
	printf("%d",atoi_2(str1));
        getchar();
        return 0;
}

3.atof

功能:把字符串转换为浮点型 string to float

头文件: stdlib.h

函数原型:  double atof(const char *nptr)

函数实现:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//atof_把字符串转换成浮点数
//1.扫描字符串2.isspace 跳过前面的空格字符3.sign 遇上数字或正负符号才开始做转换 4.isdigit 遇到非数字或字符串结束时('\0')才结束
double atof_1(const char *s)
{
	double L,R;  //L--小数点左边;R---小数点右边
    int i=0;
    assert(s!=NULL);//判断字符串是否为空  
	//if(isspace(s[i]))
	//{
	//	i++;
	//}
    for(i=0;isspace(s[i]);i++);//除去字符串前的空格  
   int sign=(s[i]=='-')?-1:1;  
    if(s[i]=='-'||s[i]=='+')//要是有符号位就前进一位  
        i++;  
    for(R=0.0;isdigit(s[i]);i++)//计算小数点之前的数字  
        R=R*10.0+(s[i]-'0');  
	if(s[i]=='.')
	{
		i++;
	}
    for(L=1.0;isdigit(s[i]);i++)//计算小数点后的数字  
    {  
        R=R*10.0+(s[i]-'0');  
       L*=10.0;  
    }  
    return sign*R/L;  
}
int main()
{

	char *str2="-12.34";
	double ret=atof_1(str2);
	printf("%lf \n",ret);
	getchar();
	return 0;
}

后续还需要添加

4.strtod //将字符串转换成浮点数,


5.strtol//参数nptr字符串根据参数base来转换成长整型数

猜你喜欢

转载自blog.csdn.net/weixin_39087263/article/details/80186780