您所在位置:论坛首页 — C/C++语言 — C语言 —[讨论]看谁的代码最好,挑战(一个常考的面试题) 本帖地址: http://bbs.pfan.cn/post-286676.html [复制地址] [搜索相关帖子] |
|||||
|
|
|||||||
|
|
作者:boxertony 专家分:22440 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
1
楼
嗯,激将法,不错,呵呵
![]() 提问的智慧: http://www.programfan.com/club/showbbs.asp?id=84419 http://www.programfan.com/club/showbbs.asp?id=16793
此帖尚未评分
|
|
作者:launchtime 专家分:0 ![]() ![]() |
2
楼
感谢楼上教诲!我是新来的。
我自己写了了一个,请高手们给改善一下: #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); }
|
|
作者:boxertony 专家分:22440 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
3
楼
我觉得你写得不错了。可以稍微改进一点的就是:
(1)一个int型数据最多不超过10位,所以LEN没必要设置那么大;而且也没多大必要使用动态申请 (2)获取字符串长度没必要再调用strlen,可以直接从i值求出
![]() 提问的智慧: http://www.programfan.com/club/showbbs.asp?id=84419 http://www.programfan.com/club/showbbs.asp?id=16793
此帖尚未评分
|
|
作者:aizibion 专家分:4350 ![]() ![]() ![]() ![]() ![]() ![]() |
4
楼
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'; }
此帖尚未评分
|
|
作者:strugglemyself 专家分:40 ![]() ![]() |
5
楼
#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; }
此帖尚未评分
|
|
作者:dielsalder 专家分:2320 ![]() ![]() ![]() ![]() |
6
楼
/* * 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; }
此帖尚未评分
|
|
作者:liren0 专家分:260 ![]() ![]() |
7
楼
int int2str(int num, char *pStr)
{ sprintf(pStr,"%d", num); return 0; }
此帖尚未评分
|
|
作者:imjohnzj 专家分:1260 ![]() ![]() ![]() |
8
楼
楼上的真是天才!!!!小弟佩服!!!!!!!
合理利用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; }
![]() 前天,我花了两百块钱,给自己的老机器加了根1G的内存。 当天,我就对自己说:“内存要省着点儿用”。 我常常向别人要分,别人回我贴,我当然要给分(灌水的不算)
此帖尚未评分
|
|