Замена нескольких пробелов на один - C (СИ)

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

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

Пишу код.
#include <stdio.h>
/*копирование ввода, замена нескольких пробелов на один*/
main ()
 
{
    int c, n, k, p;
    p = 0;
    n = ' ';
    while ((c = getchar()) != EOF) {
                      k = c;
        if (c == ' ') {k = n, ++p;}
        if (p > 0) {n = ?;}
 
        putchar (k);
    }
 
}
В принципе, если n приравнять к любому значению, напр. 'i', все работает - следующие пробелы за первым меняются на i. Не могу подобрать значение,нужно что-то вроде "бэкспейс". Может можно с getchar() как-то попробовать? Подскажите плиз. Код может быть чуть не корректен, но в Microsoft Visual C++ 6.0 все работает. Спасибо.

Решение задачи: «Замена нескольких пробелов на один»

textual
Листинг программы
#include <bool.h>
#include <stdio.h>
 
int main(void) {
    bool previous_symbol_was_space = true; // для удаления начальных пробелов
    int ch;
    while ((ch = getchar()) != EOF) {
        if (previous_symbol_was_space && ch == ' ') { continue; }
        putchar(ch);
        previous_symbol_was_space = (ch == ' ');
    }
    return 0;
}

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

  1. В начале программы подключаются две библиотеки: stdio.h и ctype.h. Библиотека stdio.h используется для ввода-вывода данных, а ctype.h содержит функции для работы со строками.
  2. Далее, в функции main(), объявляются две переменные: previous_symbol_was_space типа bool (логическое значение true или false) и ch типа int (целое число).
  3. Переменная previous_symbol_was_space инициализируется значением true, что означает, что предыдущий символ был пробелом.
  4. Затем, в цикле while, происходит чтение символа из стандартного ввода (файл stdin) с помощью функции getchar().
  5. Если предыдущий символ был пробелом и текущий символ также является пробелом, то цикл продолжается с помощью инструкции continue.
  6. Если предыдущий символ не был пробелом или текущий символ не является пробелом, то он выводится на стандартный вывод (файл stdout) с помощью функции putchar().
  7. Значение переменной previous_symbol_was_space устанавливается в true, если текущий символ является пробелом, и в false в противном случае.
  8. Цикл while выполняется до тех пор, пока не будет достигнут конец файла (EOF).
  9. В конце программы возвращается значение 0, что означает успешное выполнение программы.

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


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

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

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