В заданном массиве строк найти все слова, содержащие заданное количество гласных букв, и вывести их - C (СИ)
Формулировка задачи:
Решение задачи: «В заданном массиве строк найти все слова, содержащие заданное количество гласных букв, и вывести их»
#include <stdio.h> #include <string.h> int is_vowels(const char* s, int n){ int k, j; static char cs[26]; static const char* i = NULL; if(i == NULL){ memset(cs, 0, sizeof(cs)); for(i = "AEIOUY"; *i; ++i) cs[*i - 'A'] = 1; } for(j = 0; *s; ++s){ k = *s & 0xDF; if(k >= 'A' && k <= 'Z'){ if(cs[k - 'A']) ++j; } } return (j == n); } int main(void){ int n, i; char* w[] = { {"ESI"}, {"EBX"}, {"EDI"}, {"EAX"}, {"ESP"}, {"EBP"}, {"EDX"}, {"ECI"} }; n = sizeof(w)/sizeof(w[0]); //вывести слова с двумя гласными for(i = 0; i < n; ++i){ if(is_vowels(w[i], 2)) printf("%s ", w[i]); } putchar('\n'); //вывести слова с одним гласным for(i = 0; i < n; ++i){ if(is_vowels(w[i], 1)) printf("%s ", w[i]); } return 0; }
Объяснение кода листинга программы
В данном коде на языке C реализована функция is_vowels, которая принимает на вход два параметра: строку s и число n. Функция проверяет, содержит ли строка s заданное количество гласных букв (гласными считаются буквы A, E, I, O, U, Y). В функции используется массив cs, который содержит булевые значения для каждой буквы алфавита: если значение равно 1, то буква является гласной. В начале функции, если массив cs еще не инициализирован, он инициализируется значением 0. Затем происходит проверка каждой буквы строки s на принадлежность к гласным буквам. Если функция is_vowels возвращает значение 1, значит строка s содержит заданное количество гласных букв. В функции main создается массив строк w, содержащий несколько слов. Затем выполняется два прохода по массиву w: первый проход выводит на экран слова с двумя гласными буквами, второй проход выводит слова с одной гласной буквой. Пример вывода на экран: ESI EBX EBP ECI
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д