首页 | 通行证 | 论坛 | BLOG | 书评 | 开发文章 | 人才招聘 | 资讯 | 工具下载 | 源码下载 | 项目交易 | 兴趣小组 | 网友作品 | C语言试题测试 | 资源共享 | ACM题库

注册新会员

请登陆或者注册新用户   用户名    密  码   记住密码  注册新用户  忘记密码了

 您所在位置:论坛首页C/C++语言C语言 —[讨论]看谁的代码最好,挑战(一个常考的面试题)
 本帖地址: http://bbs.pfan.cn/post-286676.html [复制地址] [搜索相关帖子]
  发 新 帖   回 帖   快速回帖
 主题:[讨论]看谁的代码最好,挑战(一个常考的面试题)
作者:launchtime
专家分:0
级别:1
 会员信息
 发短消息
 所属BLOG
发表时间:2008-10-9 14:16:00    [回复]  [只看作者帖] [只看得分帖] [只看我的回帖]
楼主
题目:将一个int型的变量,转换成字符串,用C写一个方法:
int int2str(int num, char *pStr)

 

0
作者:boxertony
专家分:22440
级别:113级别:113级别:113级别:113级别:113级别:113级别:113级别:113

发表时间:2008-10-9 14:19:00    [回复]  [引用]
1 楼  
嗯,激将法,不错,呵呵

 

签名档
提问的智慧:
http://www.programfan.com/club/showbbs.asp?id=84419
http://www.programfan.com/club/showbbs.asp?id=16793
  此帖尚未评分
作者:launchtime
专家分:0
级别:1

发表时间:2008-10-9 14:30:00    [回复]  [引用]
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
级别:113级别:113级别:113级别:113级别:113级别:113级别:113级别:113

发表时间:2008-10-10 9:43:00    [回复]  [引用]
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
级别:22级别:22级别:22级别:22级别:22

发表时间:2008-10-10 13:26:00    [回复]  [引用]
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
级别:1

发表时间:2008-10-10 20:24:00    [回复]  [引用]
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
级别:12级别:12级别:12

发表时间:2008-10-10 23:27:00    [回复]  [引用]
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 *stringint 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
级别:2

发表时间:2008-10-12 16:52:00    [回复]  [引用]
7 楼  
int int2str(int num, char *pStr)
{
    sprintf(pStr,"%d", num);
    return 0;
}

 

  此帖尚未评分
作者:imjohnzj
专家分:1260
级别:7级别:7

发表时间:2008-10-12 17:25:00    [回复]  [引用]
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的内存。
当天,我就对自己说:“内存要省着点儿用”。

我常常向别人要分,别人回我贴,我当然要给分(灌水的不算)
  此帖尚未评分
[首页] [上页][下页] [尾页]     共有 8 回帖 当前第 1 页(共1页 20帖/页)     跳转至第
  发 新 帖   回 帖   快速回帖   刷新版面

版主管理:  删除此帖   删除回复帖   转贴   置顶   加入精华   强制结帖   >>>进入管理页面


关于本站 - 网站导航 - 广告服务 - 联系站长 - BUG报告 - 友情链接 - 赞助本站
Copyright© 1999-2008 Programfan.com. All Rights Reserved
论坛制作&维护:Hannibal    Email: webmaster@pfan.cn
最佳浏览效果:IE6.0+ 或 FireFox 1.5+ 分辨率:1024*768