回 帖 发 新 帖 刷新版面

主题:[讨论]看谁的代码最好,挑战(一个常考的面试题)

题目:将一个int型的变量,转换成字符串,用C写一个方法:
int int2str(int num, char *pStr)

回复列表 (共8个回复)

沙发

嗯,激将法,不错,呵呵

板凳

感谢楼上教诲!我是新来的。
我自己写了了一个,请高手们给改善一下:
#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 楼

我觉得你写得不错了。可以稍微改进一点的就是:
(1)一个int型数据最多不超过10位,所以LEN没必要设置那么大;而且也没多大必要使用动态申请
(2)获取字符串长度没必要再调用strlen,可以直接从i值求出

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';
}

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;
}

6 楼


[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 楼

int int2str(int num, char *pStr)
{
    sprintf(pStr,"%d", num);
    return 0;
}

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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册