整数转换成字符串itoa函数的实现

DayThinking 2012-04-14 12:18:56
一道面试题,麻烦大侠们给解决下。
题目:整数转换成字符串itoa函数的实现
要求:不能使用库函数;按给出的函数原型进行编写。
char * itoaTest(int num) ;
...全文
250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
evencoming 2012-04-14
  • 打赏
  • 举报
回复

char * itoaTest(int num)
{
char *index="0123456789";
char *str=new char[16];
int unum;
int i=0,j,k=0;
char ch;
if(num<0)
{
str[i++]='-';
num=-num;
k=1;
}
else
unum=num;
do
{
str[i++]=index[unum%10];
unum/=10;
}while(unum!=0);
str[i]='\0';
str+=k;
for(j=0;j<(i-k)/2;i++)
{
ch=str[j];
str[j]=str[i-j-1];
str[i-j-1]=ch;
}
str-=k;
return str;
}
evencoming 2012-04-14
  • 打赏
  • 举报
回复
char * itoaTest(int num)
{
char *index="0123456789";
char *str=new char[16];
int unum;
int i=0,j;
char ch;
if(num<0)
{
str[i++]='-';
num=-num;
}
else
unum=num;
do
{
str[i++]=index[unum%10];
unum/=10;
}while(unum!=0);
str[i]='\0';
for(j=0;j<i/2;i++)
{
ch=str[j];
str[j]=str[i-j-1];
str[i-j-1]=ch;
}
return str;
}
Cai菜 2012-04-14
  • 打赏
  • 举报
回复
刚才没考虑到负数的情况。
我觉得题目要求的不是很好。
不给函数传指针的话,你就要在函数里开辟空间,然后在其它函数里才能释放掉。
这么做是不好的。

#include <stdio.h>
#include <malloc.h>

char * itoaTest(int num)
{
char *a=(char*)malloc(32);
int count=0,temp,flag=0;
if (num<0)
{
num=-num;
*a='-';
flag=1;
count++;
}
temp=num;
while (temp)
{
temp/=10;
count++;
}
*(a+count)='\0';
while (flag?count-1:count)
{
*(a+(--count))='0'+num%10;
num/=10;
}
return a;
}

int main()
{
char *a;
a=itoaTest(-123456);
printf("%s",a);
free(a);
getchar();
}


vcf_reader 2012-04-14
  • 打赏
  • 举报
回复
简单一点,用 sprintf 如何?
DayThinking 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

http://topic.csdn.net/t/20040814/09/3273410.html
[/Quote]
谢谢,不过如果这样的话,就偏离原题的要求了,注意题目的要求是:char * itoaTest(int num) ;
DayThinking 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C/C++ code

#include <stdio.h>

char * itoaTest(int num,char *a)
{
int count=0;
int temp=num;
while (temp)
{
temp/=10;
count++;
}
*(a+count)='\0';
while (……
[/Quote]
朋友你好,如果这样的话,就偏离原题的要求了,注意题目的要求是:char * itoaTest(int num) ;
DayThinking 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C/C++ code

char * itoaTest(int num)
{
char *index="0123456789";
char *str=new char[16];
int unum;
int i=0,j,k=0;
char ch;
if(num<0)
{
str[i++]='-';
num=-num;
k=1;
}
else
unum=num;
do
{
str[i++]=ind……
[/Quote]
1、请问这句怎么理解?
char *index="0123456789";
str[i++]=index[unum%10];
2、如果传递进来的是负数的话,这个程序仍然有问题?
Cai菜 2012-04-14
  • 打赏
  • 举报
回复

#include <stdio.h>

char * itoaTest(int num,char *a)
{
int count=0;
int temp=num;
while (temp)
{
temp/=10;
count++;
}
*(a+count)='\0';
while (count>0)
{
*(a+(--count))='0'+num%10;
num/=10;
}
return a;
}

int main()
{
char a[20];
itoaTest(123456,a);
printf("%s",a);
getchar();
}

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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