Подсчитать количество гласных и согласных букв в строке без учета регистра - C (СИ)
Формулировка задачи:
Решение задачи: «Подсчитать количество гласных и согласных букв в строке без учета регистра»
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <Windows.h>
#define LENGTH_S 32
#define CONSONANTS_LENGTH 22
#define VOWELS_LENGTH 11
unsigned char LetterIs(wchar_t *arrayLetters, int length, wchar_t letter);
int main()
{
/*Согласные буквы.*/
wchar_t consonants[CONSONANTS_LENGTH] = L"бвгджзйклмнпрстфхцчшщ";
/*Гласные буквы.*/
wchar_t vowels[VOWELS_LENGTH] = L"ауоыиэяюёе";
/*Строка введённая пользователем с клавиатуры.*/
wchar_t S[LENGTH_S];
/*Число гласных букв.*/
int numberVowels = 0;
/*Число согласных букв.*/
int numberConsonants = 0;
setlocale(LC_ALL, "Russian");
printf("Введите строку: ");
SetConsoleCP(1251);
fgetws(S, LENGTH_S, stdin);
SetConsoleCP(866);
for (int i = 0; i < LENGTH_S; i++)
{
if (LetterIs(consonants, CONSONANTS_LENGTH, S[i]))
{
numberConsonants++;
}
else if (LetterIs(vowels, VOWELS_LENGTH, S[i]))
{
numberVowels++;
}
}
printf("Число согласных букв составляет %d, а число гласных букв составляет %d.\n", numberConsonants, numberVowels);
system("pause");
}
unsigned char LetterIs(wchar_t *arrayLetters, int length, wchar_t letter)
{
if (letter == '\0') return 0;
for (int i = 0; i < length; i++)
{
if (iswupper(letter))
{
letter = towlower(letter);
}
if (arrayLetters[i] == letter)
{
return 1;
}
}
return 0;
}
Объяснение кода листинга программы
[1] В этом коде написана функция, которая подсчитывает количество гласных и согласных букв в строке, введенной пользователем.
[2] Согласные буквы хранятся в массиве consonants, а гласные - в массиве vowels. Длина массива consonants равна 22, а длина массива vowels равна 11.
[3] В функции main создаются и инициализируются указанные массивы, а также переменные numberVowels и numberConsonants, которые будут использоваться для подсчета количества гласных и согласных букв соответственно.
[4] После установки локали на Russian пользователю предлагается ввести строку.
[5] Затем происходит цикл по всем символам введенной строки. Если символ является согласной буквой, то увеличивается счетчик numberConsonants. Если символ является гласной буквой, то увеличивается счетчик numberVowels.
[6] В конце программы выводится количество согласных и гласных букв.
[7] Функция LetterIs используется для проверки, является ли символ согласной или гласной буквой. Она принимает массив букв, их длину и символ, который нужно проверить. Если символ является гласной буквой, то функция возвращает 1. Если символ является согласной буквой, то функция возвращает 0.
[8] В функции LetterIs используется функция iswupper, чтобы привести символ к нижнему регистру, а затем функция towlower, чтобы привести его к верхнему регистру. Это делается для того, чтобы функция проверяла символ независимо от регистра.