Вывести на экран все особые слова - C (СИ)
Формулировка задачи:
Дана последовательность символов, состоящая из слов. Назовем слово особым, если в него в любых сочетаниях входят четыре различные буквы. Вывести на экран все особые слова или сообщение «Нет», если особых слов нет.
Решение задачи: «Вывести на экран все особые слова»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
#include <conio.h>
int main() {
const char CDelim[] = " \t\n,.?!";
bool find = false;
char text[256];
const char* p;
unsigned count = 0;
int alph[26] = { 0 };
unsigned i = sizeof(alph) / sizeof(*alph);
printf("text: ");
fgets(text, sizeof(text), stdin);
p = strtok(text, CDelim);
while (p) {
for (; *p; ++p) {
if (isalpha(*p)) {
alph[tolower(*p) - 'a']++;
}
}
while (i--) {
if (alph[i]) {
count++;
}
}
if (count==4) {
printf("%s\n", p);
find = true;
}
p = strtok(NULL, CDelim);
}
if (find == false) {
printf("no ...\n");
}
getch();
return 0;
}
Объяснение кода листинга программы
В этом коде используется стандартная библиотека языка C для работы со строками, символами и массивами. Список действий, которые выполняются в коде:
- Включаются необходимые заголовочные файлы:
stdio.h- для работы с функциями ввода-вывода;string.h- для работы со строками;ctype.h- для работы с символами;stdbool.h- для работы с булевыми значениями;conio.h- для работы с функциейgetch(), которая используется для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.
- Определяются переменные и константы:
CDelim[]- это строка, которая разделяет вводимый текст на отдельные слова;find- это булево значение, которое изменяется в процессе выполнения программы и определяет, было ли найдено хотя бы одно особое слово;text- это строка, в которую считывается ввод пользователя;p- это указатель на текущее слово в тексте;count- это счетчик, который подсчитывает количество найденных особых слов;alph- это массив, в котором подсчитывается количество букв в каждом слове;i- это индекс, используемый для итерации по массивуalph.
- Считывается ввод пользователя:
- Пользователю предлагается ввести текст;
- Введенный текст считывается в строку
text.
- Находится первое слово в тексте:
pинициализируется значениемstrtok(text, CDelim);strtok()- это функция, которая разделяет строку на слова и возвращает указатель на первое слово.
- Проверяется каждое слово на наличие букв:
- Если текущий символ является буквой, он учитывается в массиве
alph; - Если текущий символ не является буквой, он игнорируется.
- Если текущий символ является буквой, он учитывается в массиве
- Подсчитывается количество слов с буквами:
- Инициализируется счетчик
countравным 0; - Проверяется каждый элемент массива
alph, если его значение больше 0, увеличивается счетчикcount.
- Инициализируется счетчик
- Выводится первое найденное особое слово:
- Если
countравен 4, это означает, что было найдено особое слово, и оно выводится на экран.
- Если
- Если особых слов не найдено, выводится сообщение об этом:
- Если
countне равен 4, выводится сообщениеno ....
- Если
- Ожидается нажатие клавиши:
- Функция
getch()приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу.
- Функция
- Завершается выполнение программы:
- Возвращается значение 0, что означает успешное завершение программы.