【问题标题】:replacing two spaces with an 'x' using only putchar and getchar仅使用 putchar 和 getchar 将两个空格替换为“x”
【发布时间】:2018-04-14 22:03:09
【问题描述】:

这个程序应该用 x 替换两个空格,只使用 getchar() 和 putchar()。我的方法是将空间存储在缓冲区中,然后将其打印出来。但是程序用 x 替换了每个空格。有人可以帮帮我吗?

#include <stdio.h>
#define MAX 2

char arr[MAX];
int ret = 0;
char second;

int main()
{
  for(int i=0; ; )
  {
    if ( (ret = getchar())!= EOF)  
    {
         putchar(ret);
    }
    if(ret==' '&&second==' ')
    {
      arr[i]=ret;
      arr[i]='x';
      putchar(arr[i]);
    }   
  }
  return 0;
}

【问题讨论】:

  • 您需要为数组添加另一个索引变量,否则使用i 进行索引会留下空白。请注意arr[i]='x'; 会覆盖arr[i]=ret;
  • 索引 i 存储,例如索引 r 输出?
  • 我认为您的代码会打印出输入的每个字符,并且在每个空格后打印一个“x”。并且永远不会离开输入循环。
  • 如果你有一个单字符的缓冲区,它不需要是一个数组。您可以再声明一个变量。 (虽然我不知道你会用它做什么。)
  • @arndt 是的,这就是它的作用,但如果输入是 a a 将是 xa 并且应该是 axa

标签: c arrays for-loop if-statement


【解决方案1】:

当你读取一个字符时,首先检查它是否是一个空格。如果没有,只需打印它。如果读取另一个字符,则如果第二个是空格,则打印x,否则打印一个空格和您刚刚读取的字符。

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

【讨论】:

  • 谢谢你的回复,但我真的不明白为什么我们在 c==EOF 时放char(' ')
  • @momonosuke 此时您已到达流的末尾,但仍有一个您已阅读但尚未打印的空间。所以需要在那里打印。
  • 和 else if 语句只有在上面的 if 语句为假时才会发生。我很难理解为什么 else if 是第二个空格
  • @momonosuke 如果连续读取两个空格,您想打印x。在外部ifelse 部分中,您已经阅读了一个空格。当else if (c == ' ') 子句为真时,这意味着您已经阅读了两个空格,所以打印x 而不是那些空格。
  • 哦,现在我明白了,谢谢,如果我想修改代码以用 x 替换三个空格,那该怎么办。我只是想知道方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多