【问题标题】:Replace each string of one or more blanks with a single blank用一个空格替换每个包含一个或多个空格的字符串
【发布时间】:2020-12-29 00:09:14
【问题描述】:

这已经被问过了,但是我自己做了一个程序,我不知道为什么它不起作用。

int c;
char blank;


while ((c = getchar()) != EOF) {
    if (c == ' ') {
        putchar(c);
        while ((c = getchar()) == ' ') {
            putchar('');
        }
    }
    putchar(c);
}

基本上,我所做的就是用空替换空格。但它不起作用。如果我输入 '1' 而不是 '' 它会用 1 替换空格,所以我不知道有什么问题

【问题讨论】:

  • 您希望putchar('') 做什么? '' 不是有效的字符常量。如果你不想输出任何东西,就什么也不做。
  • 如果不想输出字符,就不要调用putchar()
  • 附加问题:循环中的第二个getchar 也可以返回EOF,因此您可能必须跳过条件if 块之后的putchar
  • 有趣的事实:整个程序可以简化为一个单行的空for循环。 for(char s[99]; scanf(" %s", s) == 1; printf("%s ", s));
  • 很好的解决方案@davide 虽然这也会从输入中删除换行符

标签: c getchar putchar


【解决方案1】:

您的代码中的具体错误在于您使用putchar() 函数的方式。使用putchar()时,必须在里面放一个字符,比如putchar('a'),但不能留空。这就是您收到错误的原因:

错误:空字符常量

基本上,putchar() 必须放一个字符,而单引号之间的任何内容:'',都不是字符。

要修复您的代码:您应该完全删除 putchar('') 行,这样您的代码将如下所示:

while ((c = getchar()) != EOF) {
    if (c == ' ') {
        putchar(c);
        while ((c = getchar()) == ' ') {

        }
    }
    putchar(c);
}

【讨论】:

  • 角落:如果输入以x<blank><blank>结尾,代码将尝试打印'x'' 'EOF
【解决方案2】:

#我想建议我的代码:

    int c,nb=0;
    while((c=getchar())!=EOF){
      if(c==' '){
         ++nb;
         if(nb>1){
           continue;
         }
         putchar(c);
    }
      if(c!=' '){
         nb=0;
         putchar(c);
    }
    }

【讨论】:

  • 欢迎来到 Stack Overflow。没有任何解释的代码很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请编辑您的问题并解释它如何回答所提出的具体问题。见How to Answer
猜你喜欢
  • 2012-01-11
  • 2011-05-13
  • 1970-01-01
  • 2011-09-04
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多