Попытка превратить несколько пробелов в один пробел - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь распечатать данные, введенные пользователем, с тем изменением, что в любое время, когда в пользовательском вводе содержится более одного пробела в строке, вывод будет показывать только один пробел.Например, если бы я написал

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 голосов
/ 28 мая 2019

чтобы превратить несколько пробелов в один пробел

Попробуйте просто отметить предыдущий символ.

int previous = 0;
int c;

printf("Enter a string of characters, please: ");
while ((c = getchar()) != EOF) {
  if (c != ' ' || previous != ' ')
    putchar(c);
  }
  previous = c;
}
0 голосов
/ 27 мая 2019

Это не проверено, но показывает подход, который я бы выбрал.

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;
    }
}
0 голосов
/ 27 мая 2019

Ваш код очень близок.
Используйте count в качестве флага и установите 1 или 0 вместо использования ++ и --.

#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;
}
0 голосов
/ 27 мая 2019

сделать что-то вроде,

`if(c==' ' && count==0)
   {
     puts("  ");//Number of spaces you want to print
     count+=1;
     continue;
   }`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...