Создать текст. Вывести на экран все слова, в которых есть двойные буквы - C (СИ)
Формулировка задачи:
Создать текст. Вывести на экран все слова, у которых есть двойные буквы (класс, группа и т.д.).Исходный текст находится в файле. Предложения разделяются символами '.', '!', ‘?’.
Помогите плез аутисту
Решение задачи: «Создать текст. Вывести на экран все слова, в которых есть двойные буквы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void double_letters(char* ); int main() { char str[] = "fdf dd"; double_letters(str); return 0; } void double_letters(char* str) { char delim[] = " \t\n,.?!;:", *first, *last; int j, flag = 0, sym = 1, db = 0; for( ; *str; str++, sym = 1){ for(j = 0; delim[j]; j++) if(*str == delim[j]) sym = 0; if(sym){ if(!flag){ first = str; flag = 1; } if(flag){ if(*str == *(str - 1)) db = 1; if(*(str + 1) == '\0' && db){ while(*first) putchar(*first++); putchar('\n'); } } } else{ if(flag){ last = str - 1; flag = 0; if(db){ while(last >= first) putchar(*first++); putchar('\n'); db = 0; } } } } }
Объяснение кода листинга программы
В этом коде реализована функция double_letters, которая принимает строку в качестве аргумента и выводит на экран все слова, в которых есть двойные буквы. Список действий, которые выполняются в коде:
- Создаются две строки: str, которая содержит исходную строку, и delim, которая содержит разделители (пробел, табуляция, перевод строки, точка, запятая, вопросительный знак, восклицательный знак, двоеточие, точка с запятой и точка).
- Инициализируются две переменные: first и last. Обе они будут использоваться для отслеживания начала и конца текущего слова.
- Переменная sym инициализируется значением 1. Она будет использоваться для отслеживания текущего символа.
- В цикле for перебираются все символы в строке str.
- Внутри цикла проверяется, является ли текущий символ одним из разделителей. Если это так, то переменная sym устанавливается равной 0, что означает, что текущий символ не является началом слова.
- Если переменная sym равна 1, то это означает, что текущий символ является началом слова. Если переменная flag равна 0, то это первое слово в строке, и поэтому переменная first устанавливается равной str, а переменная flag устанавливается равным 1. Если переменная flag уже равна 1, то это означает, что текущее слово имеет пару двойных букв, и поэтому переменная db устанавливается равным 1.
- Если переменная sym равна 0, то это означает, что текущий символ является разделителем. Если переменная flag равна 1, то это означает, что текущее слово имеет пару двойных букв, и поэтому переменная db устанавливается равным 0.
- Если переменная sym равна 1 и переменная flag равна 0, то это означает, что текущий символ является последним символом слова. В этом случае переменная last устанавливается равным str - 1, переменная flag устанавливается равным 0, и если переменная db равна 1, то все символы слова выводятся на экран, начиная с first и заканчивая last, с помощью функции putchar.
- Если переменная sym равна 1 и переменная flag равна 1, то это означает, что текущий символ является вторым символом слова. В этом случае если текущий символ равен предыдущему символу, то переменная db устанавливается равным 1.
- Если переменная sym равна 1 и переменная db равна 1, то это означает, что текущее слово имеет пару двойных букв, и поэтому все символы слова выводятся на экран, начиная с first и заканчивая last, с помощью функции putchar.
- Если переменная sym равна 1 и переменная db равна 0, то это означает, что текущее слово не имеет пары двойных букв, и поэтому ничего не выводится на экран.
- Если переменная sym равна 0, то это означает, что текущий символ является разделителем, и поэтому ничего не выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д