c语言比较麻烦一道题,求解答

用c语言实现将输入的一个整型数字(含正负数)转化为字符串存入数组并输出该字符串
例如:-123存入数组为‘-’ ‘1’ ‘2’ ‘3’ ‘/0’

1、先判断是否大于0,确定字符串第一位是否为'-'
2、然后取各个位上的数

不是有snprintf吗?

代码如下:

#include<stdio.h>
#include<string.h>

void inttostring(int figure,char str[])
{
    int i,j;
    for(i=1000000;figure/i==0;i/=10);
    if(figure<0)
    {
        int temp=-1*figure;
        str[0]='-';
        j=1;
        while(i>0)
        {
        str[j]=(temp/i)%10+'0';
        i/=10;
        j++;
        }
    }
    else if(figure>0)
    {
        int temp=figure;
        j=0;
        while(i>0)
        {
        str[j]=(temp/i)%10+'0';
        i/=10;
        j++;
        }
    }
    str[j]='\0';
}
int main()
{
    int a;
    char str[10];
    scanf("%d",&a);
    inttostring(a,str);
    printf("str=%s\n",str);
    return 0;
}

进行递归处理
x=(x-(x%10))/10;

使用itoa函数。不过linux下的编译器不支持这个函数。
char * itoa(int value,char* string, int radix);
附:放上源码

char* itoa(intnum,char*str,intradix)
{
/*索引表*/
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned unum;/*中间变量*/
int i=0,j,k;
/*确定unum的值*/
if(radix==10&&num<0)/*十进制负数*/
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')k=1;/*十进制负数*/
else k=0;
char temp;
for(j=k;j<=(i-1)/2;j++)
{
temp=str[j];
str[j]=str[i-1+k-j];
str[i-1+k-j]=temp;
}
return str;
}

使用itoa函数。不过linux下的编译器不支持这个函数。
char * itoa(int value,char* string, int radix);
附:放上源码

char* itoa(intnum,char*str,intradix)
{
/*索引表*/
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned unum;/*中间变量*/
int i=0,j,k;
/*确定unum的值*/
if(radix==10&&num<0)/*十进制负数*/
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')k=1;/*十进制负数*/
else k=0;
char temp;
for(j=k;j<=(i-1)/2;j++)
{
temp=str[j];
str[j]=str[i-1+k-j];
str[i-1+k-j]=temp;
}
return str;
}

使用itoa函数。不过linux下的编译器不支持这个函数。
char * itoa(int value,char* string, int radix);
附:放上源码

char* itoa(intnum,char*str,intradix)
{
/*索引表*/
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned unum;/*中间变量*/
int i=0,j,k;
/*确定unum的值*/
if(radix==10&&num<0)/*十进制负数*/
{
unum=(unsigned)-num;
str[i++]='-';
}
else unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')k=1;/*十进制负数*/
else k=0;
char temp;
for(j=k;j<=(i-1)/2;j++)
{
temp=str[j];
str[j]=str[i-1+k-j];
str[i-1+k-j]=temp;
}
return str;
}

使用itoa函数确实可以,c语言编程中有讲到。