Advertisement
dmkozyrev

number_of_vowels

Jan 15th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.67 KB | None | 0 0
  1. /**
  2. ==============================================================
  3.     Экзаменационный билет #15
  4.     Предмет: Языки и методы программирования
  5.     Экзаменатор1: Парфенов Денис Васильевич (составитель)
  6.     Экзаменатор2: Петрусевич Денис Андреевич
  7. ==============================================================
  8. Задание 1. Условный оператор switch, его полная форма записи
  9. и возможности. Сравнение с конструкцией if.
  10.  
  11. Задание 2. Указатели и функции. Передача содержимого
  12. переменных и массивов в функцию. Адресация элементов
  13. переданного по указателю массива внутри функции: одномерный
  14. и многомерный случаи.
  15.  
  16. Задание 3. Запрограммируйте функцию, которая считает
  17. количество гласных букв английского алфавита (к ним относятся
  18. a, e, i, o, u, y) в тексте, помещенном в стандартной строке
  19. Си, вне зависимости от того, строчные это буквы или прописные.
  20. ==============================================================
  21. **/
  22.  
  23. #include <stdio.h>
  24. #include <string.h>
  25.  
  26. void number_of_vowels(const char *, const char *, int *); // Считает количество гласных букв
  27. void print_number_of_vowels(const char *, const int *); // Выводит посчитанное кол-во на экран
  28.  
  29. int main(){
  30. //  Объявим массив из строчных гласных букв и массив их количества в строке
  31.     char vowels[] = {'a', 'e', 'i', 'o', 'u', 'y', '\0'}; // Строка строчных гласных букв
  32.     int numbers[] = {0, 0, 0, 0, 0, 0, -1}; // Их количество в строке
  33.  
  34. //  Объявим строку, в которой будем считать гласные буквы, и выведем ее на экран
  35.     char str[] = "Around the world";
  36.     printf("str = %s\n", str);
  37.  
  38. //  Посчитаем количество гласных букв
  39.     number_of_vowels(str, vowels, numbers);
  40.  
  41. //  Выведем на экран результат
  42.     print_number_of_vowels(vowels, numbers);
  43.  
  44.     return 0;
  45. }
  46.  
  47. void number_of_vowels(const char *str, const char *vowels, int *numbers){
  48. // Данная функция считает количество гласных букв в строке str вне
  49. // зависимости от того, строчные это буквы или прописные.
  50. // Гласные буквы передаются в функцию в строке vowels. Она хранит их в строчном виде (не заглавном).
  51. // Результат записывается в массив numbers;
  52.  
  53. //  Для начало необходимо обнулить массив numbers
  54.     char *pv = vowels; // указатель на нулевой элемент строки
  55.     int *pn = numbers; // указатель на нулевой жлемент массива
  56.     while (*pv != '\0'){ // Пока мы не достигли конца строки - символа '\0'
  57.         *pn = 0; // Обнуляем значение элемента массива
  58.         pv++; // Смещаемся на одну позицию вдоль строки
  59.         pn++; // Смещаемся на одну позицию вдоль массива
  60.     }
  61.     *pn = -1; // Будем в конце массива хранить -1 - символ окончания массива.
  62.  
  63. //  Начинаем подсчет количества гласных букв
  64.     while (*str != '\0'){ // Пока мы не достигли конца строки, в которой считаем
  65.         char l = tolower(*str); // Получаем символ строки в нижнем регистре (строчную букву)
  66.         char *p = strchr(vowels, l); // Смотрим, есть ли полученный символ в строке с строчными гласными буквами
  67.         if (p != NULL){ // Если есть
  68.             int i = p-vowels; // Определяем индекс как разность указателя на найденный символ и указателя на нулевой символ
  69.             numbers[i]++; // Увеличиваем на единицу соответствующий символу элемент массива
  70.         }
  71.         str++; // Смещаемся вдоль строки
  72.     }
  73. }
  74.  
  75. void print_number_of_vowels(const char *vowels, const int *numbers){
  76. //  Данная функция выводит на экран строку из строчных гласных букв и массив количества их вхождений
  77.     char *pv = vowels; // Указатель на нулевой элемент строки
  78.     int *pn = numbers; // Указатель на нулевой жлемент массива
  79.     while (*pv != '\0'){ // Пока не дошли до конца строки
  80.         printf("%c=%d ", *pv, *pn); // Выводим на экран символ и количество
  81.         pv++; // Смещаемся вправо вдоль строки
  82.         pn++; // Смещаемся вправо вдоль массива
  83.     }
  84.     printf("\n"); // Переводим курсор на новую строку
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement