1

出于各种原因,我想用 C 编写自己的函数,将 int 转换为小数字符串,就像 sprintf 一样。

例子:

    int number = 254;
    char string[10];
    sprintf(string, "%d", number);

在我要编写的函数之后,字符串应该如下所示:

    [0] 2
    [1] 5
    [2] 4
    [3] '\0'

只是为了进一步澄清,我想编程将 int 实际转换为一串字符。我不想使用 sprintf 或 itoa 等来做到这一点。我想知道它是如何完成的,并且能够自己编程并对其进行小幅调整。

附加说明:我不想使用 itoa 或 sprintf,但我自己编写了这些程序。

4

2 回答 2

2
#include <stdio.h>
#include <stdlib.h>

int i2a(char *s, int n){
    div_t qr;
    int pos;

    if(n == 0) return 0;

    qr = div(n, 10);
    pos = i2a(s, qr.quot);
    s[pos] = qr.rem + '0';
    return pos + 1;
}

char* my_itoa(char *output_buff, int num){
    char *p = output_buff;
    if(num < 0){
        *p++ = '-';
        num *= -1;
    } else if(num == 0)
        *p++ = '0';
    p[i2a(p, num)]='\0';
    return output_buff;
}

int main(void){
    int number = -254;
    char string[12];
    printf("%s", my_itoa(string, number));
    return 0;
}
于 2013-04-29T16:02:02.787 回答
0
int number = 254;
int back=0,i=0;
char ch='\0';
char string[10];

for(i=0;(number/10)==0;i++){
    back=number%10;
    ch=(back*pow(10,i)+48);
    string[i]=ch;
}
  1. 每10除数
  2. 得到剩下的(用 % )剩下的就是你想要的从右边开始的数字
  3. 将数字转换为 char +48(ascii 0)
  4. 添加到字符串
于 2013-04-29T16:04:37.693 回答