Замена каждой строки, состоящей из одного или нескольких пробелов, одним пробелом - C (СИ)
Формулировка задачи:
Упражнение 1.9.
Напишите программу для копирования входного потока в выходной с заменой каждой строки, состоящей из одного или нескольких пробелов, одним пробелом.#include <stdio.h> #define IN 1 /* внутри слова */ #define OUT 0 /* снаружи слова */ main(){ /* замена строки, состоящей из пробелов, одним пробелом */ int character; /* входной символ */ int spaceCounter = 0; /* счётчик пробелов */ int charCounter = 0; /* счётчик символов внутри строки */ int state = OUT; /* положение внутри (IN) или снаружи (OUT) строки */ while((character = getchar()) != EOF){ if(character == '\n') state = OUT; else if (state == OUT) state = IN; if(state == IN){ putchar(character); /* вывод символа на экран */ charCounter++; /* подсчёт символов внутри строки */ if(character == ' ') spaceCounter++; /* подсчёт пробелов */ } else { if((spaceCounter == charCounter) && spaceCounter > 0){ /* строка состоит только из пробелов */ putchar('\r'); /* возврат каретки в начало строки */ putchar(' '); } putchar(character); } } }
Решение задачи: «Замена каждой строки, состоящей из одного или нескольких пробелов, одним пробелом»
textual
Листинг программы
#include <stdio.h> int main() { int c; int spaces_num; int fail; spaces_num = 0; fail = 0; while ((c = getchar()) != EOF) { if (c != '\n') { if (c == '_') { if (fail == 1) { putchar('_'); } else { spaces_num = spaces_num + 1; } } else if (c != '_') { fail = 1; if (spaces_num > 0) { while (spaces_num > 0) { putchar('_'); spaces_num = spaces_num - 1; } } putchar(c); } } else { if (spaces_num > 0) putchar('_'); spaces_num = 0; fail = 0; } } }
Объяснение кода листинга программы
- В начале кода объявлены три переменные: c, spaces_num, fail. Значение первой переменной будет определяться вводимым символом, значение двух других - 0.
- Переменная spaces_num инициализируется значением 0, а fail - 0.
- Используется цикл while для чтения каждого символа из стандартного ввода до достижения EOF.
- Если текущий символ не является символом новой строки (\n), выполняется следующий блок кода.
- Если текущий символ является символом подчеркивания (_), выполняется следующий блок кода.
- Если текущий символ не является символом подчеркивания, но предыдущий символ был символом подчеркивания, выполняется следующий блок кода.
- Если текущий символ не является символом подчеркивания и предыдущий символ не был символом подчеркивания, выполняется следующий блок кода.
- Если текущий символ является символом новой строки, выполняется следующий блок кода.
- Если значение переменной spaces_num больше 0, выводится символ подчеркивания до тех пор, пока значение переменной spaces_num не станет равным 0.
- Выводится текущий символ.
- Если значение переменной spaces_num больше 0, выводится символ подчеркивания.
- Значение переменной spaces_num устанавливается равным 0.
- Значение переменной fail устанавливается равным 0.
- Цикл while продолжается до тех пор, пока не будет достигнут EOF.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д