主题:[讨论]看谁的代码最好,挑战(一个常考的面试题)
launchtime [专家分:0] 发布于 2008-10-09 14:16:00
题目:将一个int型的变量,转换成字符串,用C写一个方法:
int int2str(int num, char *pStr)
回复列表 (共8个回复)
沙发
boxertony [专家分:23030] 发布于 2008-10-09 14:19:00
嗯,激将法,不错,呵呵
板凳
launchtime [专家分:0] 发布于 2008-10-09 14:30:00
感谢楼上教诲!我是新来的。
我自己写了了一个,请高手们给改善一下:
#include <string.h>
#include <stdio.h>
#include <malloc.h>
#define LEN 100
int int2char(int num,char* pStr)
{
int sgn = 1;
int c;
int i=0;
int size;
char *str = (char*)malloc(sizeof(char)*LEN);
if(num<0){
sgn = -1;
num = -1*num;
}
while(num){
c = num%10;
num = num/10;
str[i] = c+48;
i++;
}
if(sgn == -1){
str[i] = '-';
str[i+1] = '\0';
}
else str[i] = '\0';
size = strlen(str);
for(i=0; i<size; i++)
pStr[i] = str[size-1-i];
pStr[i] = '\0';
free(str);
return (1);
}
3 楼
boxertony [专家分:23030] 发布于 2008-10-10 09:43:00
我觉得你写得不错了。可以稍微改进一点的就是:
(1)一个int型数据最多不超过10位,所以LEN没必要设置那么大;而且也没多大必要使用动态申请
(2)获取字符串长度没必要再调用strlen,可以直接从i值求出
4 楼
aizibion [专家分:4780] 发布于 2008-10-10 13:26:00
void itoa_own(char* str, long val)
{
if (!str)
{
return;
}
char p[10] = {0};
char index = '0';
int id = val%10;
p[0] = index + id;
int i = 1;
while (val>9)
{
val = val/10;
id = val%10;
p[i++] = index + id;
}
int len = strlen(p);
for(int j = len-1,i = 0;j>=0;j--)
{
str[i++] = p[j];
}
str[len] = '\0';
}
5 楼
strugglemyself [专家分:100] 发布于 2008-10-10 20:24:00
#include<iostream>
using namespace std;
int intstr(int num,char *Pchar)
{
int i=0,n,Num=num;
do
{
if(num<0)
num=-num;
n=num%10;
num/=10;
Pchar[i]=n+48;
i++;
}while((num>9));
Pchar[i]=num+48;
i++;
if(Num<0)
{
Pchar[i]='-';
Pchar[++i]='\0';
}
else
{
Pchar[i]='\0';
}
return i;
}
6 楼
dielsalder [专家分:2330] 发布于 2008-10-10 23:27:00
[code=c]
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/crtdll/stdlib/itoa.c
* PURPOSE: converts a integer to ascii
* PROGRAMER:
* UPDATE HISTORY:
* 1995: Created
* 1998: Added ltoa Boudewijn Dekker
*/
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
#include <errno.h>
#include <stdlib.h>
char *
itoa(int value, char *string, int radix)
{
char tmp[33];
char *tp = tmp;
int i;
unsigned v;
int sign;
char *sp;
if (radix > 36 || radix <= 1)
{
errno = EDOM;
return 0;
}
sign = (radix == 10 && value < 0);
if (sign)
v = -value;
else
v = (unsigned)value;
while (v || tp == tmp)
{
i = v % radix;
v = v / radix;
if (i < 10)
*tp++ = i+'0';
else
*tp++ = i + 'a' - 10;
}
if (string == 0)
string = (char *)malloc((tp-tmp)+sign+1);
sp = string;
if (sign)
*sp++ = '-';
while (tp > tmp)
*sp++ = *--tp;
*sp = 0;
return string;
}
[/code]
7 楼
liren0 [专家分:260] 发布于 2008-10-12 16:52:00
int int2str(int num, char *pStr)
{
sprintf(pStr,"%d", num);
return 0;
}
8 楼
imjohnzj [专家分:1490] 发布于 2008-10-12 17:25:00
楼上的真是天才!!!!小弟佩服!!!!!!!
合理利用C函数库是写C程序的基础。顶!!
小弟呢,照前几楼的思路也写了段代码:
int int2str(int n,char* str){
int i=0,j=0;
char s[10];
if(n>=0)str[0]=' ';
else str[0]='-',n= -n;
while(n<=-10 || n>=10){
s[i++]=(n%10)+'0';
n/=10;
}
s[i]=n%10+'0';
for(j=1;i>=0;i--,j++)str[j]=s[i];
str[j]='\0';
return 0;
}
我来回复