【问题标题】:Display an integer comma separated in C? [duplicate]显示用 C 分隔的整数逗号? [复制]
【发布时间】:2013-09-04 09:23:50
【问题描述】:

我们如何显示在 C 中分隔的整数逗号?

例如如果int i=9876543,结果应该是9,876,543.

【问题讨论】:

  • “如何在 C 中将数字从 1123456789 格式化为 1,123,456,789?”中的答案不要提供可移植的答案或适用于所有int 的答案(INT_MIN 对许多人来说都失败)。此处接受的答案是可移植的,适用于 INT_MIN。

标签: c


【解决方案1】:

您可以使用LC_NUMERICsetlocale() 或构建自己的函数,例如:

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

char *fmt(long x)
{
    char s[64], *p = s, *q, *r;
    int len;

    len = sprintf(p, "%ld", x);
    q = r = malloc(len + (len / 3) + 1);
    if (r == NULL) return NULL;
    if (*p == '-') {
        *q++ = *p++;
        len--;
    }
    switch (len % 3) {
        do {
            *q++ = ',';
            case 0: *q++ = *p++;
            case 2: *q++ = *p++;
            case 1: *q++ = *p++;
        } while (*p);
    }
    *q = '\0';
    return r;
}

int main(void)
{
    char *s = fmt(9876543);

    printf("%s\n", s);
    free(s);
    return 0;
}

【讨论】:

  • +1 表示重新访问了 Duff 的设备!
  • +1 尚未找到适用于 INT_MIN 且可移植的答案“如何在 C 中将数字从 1123456789 格式化为 1,123,456,789?”。这个似乎是两者(除了幻数 64)。
【解决方案2】:

我相信没有内置功能。但是,您可以将整数转换为字符串,然后根据结果字符串的长度计算逗号位置(提示:第一个逗号将在 strlen(s)%3 数字之后,避免使用前导逗号)。

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2020-12-06
    相关资源
    最近更新 更多