1.数字转换为字符串
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,有如下几种函数对应不同的需求。
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将无符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五入。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
● fcvt():指定位数为转换精度,其余同ecvt()。
当要求不使用库函数来进行转换。我们可以探讨一下思路。
数字是int等类型,而字符串变量需要字符数组来存放。由此可知需要将数字求出各个位然后存放到数组中。需要特别注意的就是当数字是负数时需要在数组的第0位存放正负符号。
具体实现如下:
void int2str(int n,char*str)
{
int temp;
temp=n>0?n:-n; //保证temp为正
char buff[10]="";
int i=0;
int len=0;
if(str==NULL)
return;
while(temp)
{
buff[i++]=temp%10+'0';
temp=temp/10;
}
len=n<0?++i:i; //在字符数组中为正负号留下位置
str[i]=0;
while(1)
{
i--;
if(buff[len-i-1]==0)
break;
str[i]=buff[len-i-1];
}
if(i==0)
{
str[i]='-';
}
}
注意事项:
1.while函数中buff倒序复制到str,这时是为了给正负号留下位置。当然也可以先判断正负号,对i进行++操作,然后再正序复制。
2.字符串转换为数字
与1类似,C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。以下列举了各函数的方法及其说明。
● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
当要求不使用库函数来进行转换。我们探讨一下思路。
字符串变量存储在字符数组之中,即可以按照下标访问到每个字符。根据ASCII码的规则每个字符可以找到对应的数字,即‘4’-‘0'数值等于4。按照此特性即可进行转换。
特别要注意的是正负号的处理,我的方法是用一个常数来记录正负。
int str2int(char *str)
{
int temp=0;
int c=1; //正负系数
if(*str=='-')
{
c=-1;
str++;
}
if(*str=='+')
{
str++;
}
while (*str!=0)
{
if((*str<'0')||(*str>'9'))
{
break;
}
temp=temp*10+(*str-'0');
str++;
}
temp=c*temp;
return temp;
}
参考网址:C语言字符串与数字相互转换
本人不才,有错希望大家指出。