如何用c语言把整形转换成字符型

liushuan 2004-08-14 09:10:07
用符合ANSI c标准形式的代码,
下面是我的题目:是用c语言编写的,不用c++,
char *int_to_string(int number,char *strnum
{



}
要求是:定义一个整形(int)指针,转换成一个字符串型指针,输出的时候也必须是字符型。但不能用sprintf函数简单输出。
...全文
5890 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
LionEagle 2004-09-02
  • 打赏
  • 举报
回复
to icelover(C++):

用while的问题就在于number=0时,第一个while循环被跳过,第二个for循环也被跳过,因此输出的字符串为"\0",而实际应该输出的是"0\0"
liushuaiboy 2004-08-21
  • 打赏
  • 举报
回复
mark
huangyang88 2004-08-18
  • 打赏
  • 举报
回复
#include <stdio.h>


char* inttostring(int num, char* nums)
{
int i, flag=0, len=0;

if( num <0)
{
flag=1;
num = -num;
}

while(num/10)
{
nums[len++] = '0' + num%10;
num=num/10;
}

nums[len++] = '0' + num ;
nums[len] = '\0';

for(i=0; i<len/2; i++)
{
char ch = nums[i];
nums[i] = nums[len-i-1];
nums[len-i-1] = ch;
}

if(flag)
{
for(i=0; i<=len; i++)
{
nums[len-i] = nums[len-i-1];
}
nums[0] ='-';
nums[len+1]=0;
}

return nums;
}


int main()
{
int x= 0;
char y[100];

inttostring(x, y);
printf("%s\n", y);

return 0;
}
icelover 2004-08-17
  • 打赏
  • 举报
回复
#include <stdio.h>
#define INTLEN 8 /*容纳整数转换成的字符串的数组的最大长度*/

/*得到字符串长度*/
int strlen(char s[])
{
int i = 0;

while(s[i] != '\0')
i++;
return i;
}

/*逆转一个字符串*/
void reverse(char s[])
{
int i,j;
char c;
for(i=0,j=strlen(s)-1;i<j;i++,j--){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}


char *int_to_string(int n,char s[])
{
int i,sign; /*sign判断是不是小于0*/
if((sign = n) <= 0)
n = -n;
i = 0;
/*使用do-while循环后,n为0的情况就不用单独处理*/
do{
s[i++] = n % 10 + '0';
}while((n/=10)>0);
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
return s;
}

int main(void)
{
int n;
char s[INTLEN];

printf("input a integer: ");
scanf("%d",&n);
int_to_string(n,s);
printf("string: %s\n",s);
return 0;
}
ra3 2004-08-14
  • 打赏
  • 举报
回复
用 itoa 函数很容易。

例如:
int i = 1234;
printf("%s ", itoa(i));
nowaketi 2004-08-14
  • 打赏
  • 举报
回复
单个的数字和字符相差#0030,也就是48
icelover(C++) 的程序正解,支持
micty 2004-08-14
  • 打赏
  • 举报
回复
#include <stdio.h>
char *int_to_string(int number,char *strnum)
{
int j=0,i=0,n=0;
while(number>0)
{
*(strnum+j)=number%10+48;
j++;
number=number/10;
n++;
}
char temp;
/*将其逆转*/
for(i=0;i<n/2;i++)
{
temp=*(strnum+j+i-n);
*(strnum+j+i-n)=*(strnum+j-i-1);
*(strnum+j-i-1)=temp;
}
strnum[n]='\0';
return strnum;
}

void main()
{
int n=12345;
char num[10];
int_to_string(n,num);
printf("%s\n",num);
}

支持~
ziffle 2004-08-14
  • 打赏
  • 举报
回复
(type)cast

type是你要转换成的类型,cast是你的表达式,或是变量.
sharkhuang 2004-08-14
  • 打赏
  • 举报
回复
itoa
LionEagle 2004-08-14
  • 打赏
  • 举报
回复
to icelover(C++):

你的程序至少有如下的一个bug:不可以用while循环,而应该用do{}while循环,你没有考虑到number为0的情况
wwwooowww 2004-08-14
  • 打赏
  • 举报
回复
char *int_to_string(int number,char *strnum)
{
int i = 0,j;
int pn = &number;
int left = *pn;
char tempCh;
strnum[0] = (char)('0' + left%10);
i ++;
while ((left = left/10))
{
strnum[i] = (char)('0' + left%10);
i ++;
}
strnum[i] = 0;//字符串结束标志
for (j=0; j<(i/2); j++)
{//调换,原来是逆序
tempCh = strnum[j];
strnum[j] = strnum[i-j];
strnum[i-j] = tempCh;
}
printf("%s\n",strnum);
return strnum;



}
icelover 2004-08-14
  • 打赏
  • 举报
回复
#include <stdio.h>
char *int_to_string(int number,char *strnum)
{
int j=0,i=0,n=0;
while(number>0)
{
*(strnum+j)=number%10+48;
j++;
number=number/10;
n++;
}
char temp;
/*将其逆转*/
for(i=0;i<n/2;i++)
{
temp=*(strnum+j+i-n);
*(strnum+j+i-n)=*(strnum+j-i-1);
*(strnum+j-i-1)=temp;
}
strnum[n]='\0';
return strnum;
}

void main()
{
int n=12345;
char num[10];
int_to_string(n,num);
printf("%s\n",num);
}
FlyindanceDDr 2004-08-14
  • 打赏
  • 举报
回复
哈哈
wwwooowww 2004-08-14
  • 打赏
  • 举报
回复
char *int_to_string(int number,char *strnum
{
return *itoa(number,strnum,10);



}
icelover 2004-08-14
  • 打赏
  • 举报
回复
to LionEagle(LionEagle)
对,谢谢你指出,我确实没有考虑number<=0的情况,对于小于0的情况,只需要加上一个负号就可以了,至于等于0的情况,就更简单了。
至于用do-while,我觉得用while应该可以阿,你能告诉我问题在什么地方吗?
谢谢

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧