В заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Столкнулся с проблемой в программе. Пробелы удаляет, но если ввести пробелы перед строкой, то их не удалит. Полное задание: Написать функцию, которая позволяет в заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним. Специфика состоит в том, что в задании нельзя использовать библиотечные функции обрабатывания строк. Ниже код моей программы:
#include <stdio.h>
int prob(char s)
{
    int d;
    d = 0;
printf("Input your text:\n");
while ((s = getchar()) != EOF) 
    {
        if (s == ' ')       
            d++;
        if (d <= 1 )        
            putchar (s);
        if (s != ' '&&d > 1)  
            putchar (s);
        if (s != ' ')       
            d=0;
    }
    printf("Press any key to exit...");
}
C помощью еще одного цикла и метки смог избавится от проблемы, однако это только при первой вводе строки. При повторном вводе и если перед строкой пробелы - все равно один пробел остается.

Решение задачи: «В заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним»

textual
Листинг программы
int main()
{
  int d=0;
  char s;
  setlocale(0,"");
  while ((s = getchar())==' ')
     ;
  putchar(s);
  while ((s = getchar()) != EOF) 
  {
     if (s == ' ')       
            d=1;
     else 
     {
         if(d)
         {
            putchar(' ');
            d=0;
         }
         putchar (s);
     }
  }
  printf("Press any key to exit...");
  return 0;
}

Объяснение кода листинга программы

  1. Установка локализации на русскую языковую среду.
  2. Переменная d инициализируется нулем.
  3. Переменная s используется для хранения символа, который считывается из стандартного ввода.
  4. В цикле while считывается каждый символ из стандартного ввода до тех пор, пока не встретится символ пробела.
  5. Если символ равен пробелу, то переменная d устанавливается равной единице.
  6. Если символ не равен пробелу, то проверяется значение переменной d.
  7. Если значение переменной d равно единице, то выводится один пробел.
  8. Значение переменной d устанавливается равным нулю.
  9. Выводится символ, который был считан из стандартного ввода.
  10. Цикл while считывает каждый символ из стандартного ввода до тех пор, пока не достигнет конца файла.
  11. Если символ равен пробелу, то ничего не происходит.
  12. Если символ не равен пробелу, то он выводится на экран.
  13. После окончания работы программы выводится сообщение Press any key to exit....
  14. Программа возвращает ноль, что означает успешное завершение работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы