版权声明:本文为博主原创文章,未经博主允许不得转载。 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 //将字符串转换成浮点数,