试图将多个空间变成一个空间

时间:2019-05-27 18:05:37

标签: c

我正在尝试打印修改后的用户输入,即只要用户输入中一行中有多个空格,输出将只显示一个空格。例如,如果我写

Hey,     I love Stack Overflow

我希望输出为

Hey, I love Stack Overflow

我看到了一些答案,但是它们不是C语言,也没有遵循我认为可以工作的逻辑。

int c, count;
c = 0;
count = 0;
printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF)
{
    if (c == ' ')
        ++count;
    if ((count == 1) && c == ' ')
        continue;
    else
        count--;
    putchar(c);
}

但是,当我运行此代码时,输​​出不会删除多余的空格,只会输出完全相同的消息。

4 个答案:

答案 0 :(得分:0)

这未经测试,但显示了我采用的方法。

int inSpace = 0;

printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF)
{
    if (c == ' ')
    {
        if (!inSpace)
        {
            putchar(c);
            inSpace = 1;
        }
    }
    else
    {
        putchar(c);
        inSpace = 0;
    }
}

答案 1 :(得分:0)

您的代码非常接近。
使用count作为标志,并设置为10而不是使用++--

#include <stdio.h>

int main ( void) {
    int c = 0, count = 1;//1 to skip leading spaces
    printf ( "Enter a string of characters, please: ");
    while ( ( c = getchar()) != EOF) {
        if ( c == ' ') {//c is a space
            if ( count == 1 && c == ' ') {//skip extra spaces
                continue;
            }
            //if count is 0 execution will fall through and putchar will be called
            count = 1;//flag to skip extra spaces
        }
        else {//c is not a space
            count = 0;//flag to print a space
        }
        putchar ( c);
    }
    return 0;
}

答案 2 :(得分:0)

  

将多个空格转换为一个空格

只考虑前面的字符即可。

int previous = 0;
int c;

printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF) {
  if (c != ' ' || previous != ' ')
    putchar(c);
  }
  previous = c;
}

答案 3 :(得分:-1)

做类似的事情,

`if(c==' ' && count==0)
   {
     puts("  ");//Number of spaces you want to print
     count+=1;
     continue;
   }`