【问题标题】:convert int to string with decimals将 int 转换为带小数的字符串
【发布时间】:2013-04-29 15:06:02
【问题描述】:

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

例子:

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

我要写的函数后面的字符串应该是这样的:

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

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

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

【问题讨论】:

  • 虽然它看起来像 C/C++,但能否请您正确标记所用语言的问题?
  • 这个问题高度依赖语言。你是说 C 语言吗?
  • 啊,忘了说语言,现在加了,是C。
  • 我知道如何用 C 编程...我不需要任何帮助。我想知道如何在不使用 itoa 或 sprintf 的情况下进行转换。 <_>

标签: c string int decimal


【解决方案1】:
#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;
}

【讨论】:

  • 谢谢。我认为这也可以处理带符号的整数?
  • @CMan can handle signed int too?
【解决方案2】:
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. 添加到字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2011-10-02
    相关资源
    最近更新 更多