Условие
К гласным буквам в латинском алфавите относятся буквы A, E, I, O, U и Y. Остальные буквы считаются согласными. Напишите программу, считающую количество гласных букв в тексте.
Входные данные
Во входном файле содержатся одна строка текста, состоящая только из заглавных латинских букв и пробелов. Длина строки не превышает 100 символов.
Выходные данные
В выходной файл вывести одно целое число – количество гласных во входном тексте.
Код
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <stdio.h> #include <cstring> using namespace std; int main (){ 	int length,i,j,kol=0;  	char vowel []="AEIOUY";  	char text [100];  	gets (text); //функция считывает все введённые символы с пробелами до тех пор, пока не будет нажата клавиша Enter  	length=strlen (text);  	for (j=0; j<=5; j++){ 		for (i=0; i<=length; i++) 			if (text[i]==vowel[j])//сравниваем введённые элементы с заданными значениями строки 				kol=kol+1; 	} 	cout << kol << endl; 	return 0; } | 
Код с функцией strpbrk()
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> #include <cstring> using namespace std; int main () { 	int counter=0; 	char text[100]; 	char vowel[] = "AEOUIY"; 	char * pch; 	cin.getline(text,100); 	pch = strpbrk (text, vowel); 	while (pch != NULL) // пока есть гласные буквы 	{ 		pch = strpbrk (pch+1,vowel); // поиск гласных букв 		counter++; 	} 	cout << counter; 	return 0; } | 
Решение
Объявляется инициализированная строка, в которой может поместиться шесть символов, а последнее, седьмое место отводится под нуль-терминатор. Далее считываются все веденные символы, включая пробелы. Сравнивается первый элемент строки с каждым элементом считываемых символов. Если считываемый символ соответствует символу строки, то увеличиваем количество гласных на единицу и так далее для всех гласных букв. Когда первый элемент строки сравнили со всеми считываемыми символами, начинаем так же сравнивать каждый последующий элемент.
Реализация с использованием string
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <string> using namespace std; int main() { 	int counter=0; 	string text; //инициализируем строку 	getline (cin,text); //извлекает строки из входного потока 	string vowel="AEOUIY";  	size_t found=text.find_first_of(vowel); //Поиск по строке text для первого символа, который соответствует любому элементу строки vowel 	while (found!=-1)  	{ 		counter++; 		found=text.find_first_of(vowel,found+1); 	} 	cout << counter << endl; 	return 0; } | 
Алгоритм решения (string)
Строка вводится из входного потока. Разыскивается первое вхождение любой гласной буквы. Если такое вхождение имеет место,то счетчик наращивается на единицу, после чего с позиции, следующей за гласной, поиск гласной начинается снова пока не будет найдена последняя гласная. Если гласных в слове нет, то, счетчик, соответственно, не наращивается и выводится ноль.
Тестирование
| № | Входные данные | Выходные данные | 
| 1 | COBBRA | 2 | 
| 2 | REE BA | 3 | 
| 3 | U GFD | 1 | 
Ссылки
- Условие задачи можно найти на сайте e-olymp;
- Засчитанное решение;
- Решение задачи cфункцией strpbrk() на ideone.com;
- Решение задачи с использованием string;
