Замена нескольких пробелов на один - C (СИ)
Формулировка задачи:
Пишу код.
В принципе, если n приравнять к любому значению, напр. 'i', все работает - следующие пробелы за первым меняются на i. Не могу подобрать значение,нужно что-то вроде "бэкспейс". Может можно с getchar() как-то попробовать? Подскажите плиз. Код может быть чуть не корректен, но в Microsoft Visual C++ 6.0 все работает. Спасибо.
#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);
}
}Решение задачи: «Замена нескольких пробелов на один»
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;
}
Объяснение кода листинга программы
- В начале программы подключаются две библиотеки: stdio.h и ctype.h. Библиотека stdio.h используется для ввода-вывода данных, а ctype.h содержит функции для работы со строками.
- Далее, в функции main(), объявляются две переменные: previous_symbol_was_space типа bool (логическое значение true или false) и ch типа int (целое число).
- Переменная previous_symbol_was_space инициализируется значением true, что означает, что предыдущий символ был пробелом.
- Затем, в цикле while, происходит чтение символа из стандартного ввода (файл stdin) с помощью функции getchar().
- Если предыдущий символ был пробелом и текущий символ также является пробелом, то цикл продолжается с помощью инструкции continue.
- Если предыдущий символ не был пробелом или текущий символ не является пробелом, то он выводится на стандартный вывод (файл stdout) с помощью функции putchar().
- Значение переменной previous_symbol_was_space устанавливается в true, если текущий символ является пробелом, и в false в противном случае.
- Цикл while выполняется до тех пор, пока не будет достигнут конец файла (EOF).
- В конце программы возвращается значение 0, что означает успешное выполнение программы.