Условие
К гласным буквам в латинском алфавите относятся буквы 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;