如何删除最后一个数字中的逗号?

Posted

技术标签:

【中文标题】如何删除最后一个数字中的逗号?【英文标题】:How to remove the comma in the last number? 【发布时间】:2021-12-30 15:31:42 【问题描述】:

列表必须显示“1,2,3,4”,但在这段代码中显示为“1,,2,,,3,,,4” 这段代码有什么问题?

for (i = 1; i <= num1; ++i) 
    if(num1 % i == 0)
        printf("%d",i);
    if(i<num1)
        printf(",");

【问题讨论】:

【参考方案1】:

只有在打印数字时才需要打印逗号,所以把它放在同一个if中。

for(i = 1; i <= num1; ++i) 
      if(num1 % i == 0)
          printf("%d",i);
          if(i<num1)
            printf(",");
      

【讨论】:

成功了。非常感谢!! 请不要只写代码答案。解释问题的原因以及应该如何解决。我们不是调试服务。【参考方案2】:

问题是您正在打印,,即使是未通过检查的数字

固定:

for (i = 1; i <= num1; ++i) 
    if (num1 % i == 0) 
        printf("%d", i);
        if (i < num1)
            printf(",");
    


printf("\n");

以上依赖于通过检查的最后一个元素。因为是这样,所以可以简化为:

for (i = 1; i < num1; ++i) 
    if (num1 % i == 0) 
       printf("%d,", i);
    


printf("%d\n", num1);

但是,一般来说,您不能依赖最后一个通过检查的数字。以下是一种更通用的方法,不依赖于通过检查的最后一个数字:

const char *prefix = "";
for (i = 1; i <= num1; ++i) 
    if (num1 % i == 0) 
       printf("%s%d", prefix, i);
       prefix = ",";
    


printf("\n");

【讨论】:

【参考方案3】:

或者比上面更有效:

for (i = 1; i < num1; ++i) 
    if (num1 % i == 0) 
        printf("%d,",i);
    

printf("%d",num1);

换句话说:

    无需在每次迭代时检查i &lt; num1 上次迭代时无需检查num1 % i == 0

【讨论】:

【参考方案4】:

为了避免 if 或条件运算符 (?:),我通常只打印循环外的第一项

printf("1");                       // 1
for (i = 2; i <= num1; ++i)                              // note: start at 2
    if (num1 % i == 0) 
        printf(", %d", i);         // , 2, 3, 4, ..., n
    

printf("\n");                      // newline

【讨论】:

【参考方案5】:

这是一个非常简短的版本,使用三元运算符:

#include <stdio.h>

int main(void) 
    int num1=24;
    
    for (int i = 1; i <= num1; ++i)
        printf((num1%i)? "": "%d%s", i, (i<num1)? "," : "");
    
    return 0;

输出:

Success #stdin #stdout 0s 5660KB
1,2,3,4,6,8,12,24

【讨论】:

致破坏我答案的人,称其为条件运算符。不,它被称为三元运算符 (syntaxdb.com/ref/c/…) alternate 名称是“三元条件”运算符。 “条件运算符”是它的简写俚语。 就像你不可靠的来源一样,你错了。它被称为conditional operator。它是a三元运算符,是C语言的only三元运算符,但它被称为条件运算符。将其称为三元运算符就像将加法称为二元运算符。 无论如何,编辑的目的是使代码更具可读性,因为您必须滚动才能看到它。我刚刚解决了这个问题,因为我已经解决了你的答案的问题。否则我不会更改它,因为它被广泛称为三元运算符,即使这不是它的名字。但修复错误不会造成破坏。 抱歉,该链接是针对 C++ 的。 Correct link。和from the actual C spec。 (好吧,它的草稿很晚。)

以上是关于如何删除最后一个数字中的逗号?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除最后一位数字后的逗号? [复制]

如何删除 D3 轴刻度中的逗号并删除最后一个刻度?

如何删除最后一个逗号? [重复]

如何删除for循环中的最后一个逗号

如何删除最后一个字符(从数组创建字符串时的逗号)? [复制]

如何删除字符串中的逗号