Создать текст. Вывести на экран все слова, в которых есть двойные буквы - 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, то это означает, что текущий символ является разделителем, и поэтому ничего не выводится на экран.