Вывести слова, оканчивающиеся на гласную букву - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет, помогите решить задачу на языке С без использования библиотеки string.h и, желательно, указателей. Нужно ввести строку и вывести слова, оканчивающиеся на гласную букву. Заранее спасибо!

Решение задачи: «Вывести слова, оканчивающиеся на гласную букву»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define DELIM ",.-;:!? \t\n"
  5. #define VOWELS "AaEeIiOoUuYy"
  6. #define is_vowel(c) (  strchr(VOWELS, (c)) )
  7.  
  8. int main(void) {
  9.     char * ptr, buf[BUFSIZ];
  10.    
  11.     while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
  12.         for ( ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) )
  13.             if ( is_vowel(ptr[strlen(ptr) - 1]) )
  14.                 printf("%s\n", ptr);
  15.    
  16.     return 0;
  17. }

Объяснение кода листинга программы

В этом коде:

  1. #include И #include включают в программу функции файлов stdio.h и string.h, которые нужны для работы с консолью и строками соответственно.
  2. #define DELIM ,.-;:!? \t\n определяет строку, которая разделяет вводимую строку на отдельные слова. В данном случае, словами считаются последовательности символов, разделенные запятыми, точками, дефисами, точками с запятой, восклицательными и вопросительными знаками, а также пробелами и символами новой строки.
  3. #define VOWELS AaEeIiOoUuYy определяет строку, которая содержит все гласные буквы. Это необязательно только те буквы, которые представлены в этой строке, считаются гласными.
  4. #define is_vowel(c) ( strchr(VOWELS, (c)) ) определяет функцию, которая проверяет, является ли последний символ в строке гласной. Функция strchr ищет первое вхождение символа (в данном случае гласной) в строке, и если это так, то возвращает позицию этого символа в строке, иначе возвращает NULL. Поскольку нам нужно проверить только последний символ, мы используем обращение к последнему элементу строки (c[strlen(c) - 1]).
  5. int main(void) определяет точку входа в программу.
  6. *char ptr, buf[BUFSIZ]; объявляет две переменные: ptr, которая будет использоваться как указатель на строку, и buf**, которая будет использоваться для хранения введенной строки.
  7. *while ( printf(String:) && fgets(buf, BUFSIZ, stdin) && buf != '\n' )** определяет цикл, который будет выполняться до тех пор, пока пользователь не введет пустую строку. Внутри цикла выводится приглашение для ввода строки, затем считывается строка и проверяется, не является ли она пустой.
  8. for ( ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) ) определяет цикл, который будет выполняться для каждого слова в введенной строке. Функция strtok разбивает строку на слова и возвращает указатель на первое слово. Если слово не найдено, то возвращается NULL. Цикл продолжается, пока не будет найден следующий слова.
  9. if ( is_vowel(ptr[strlen(ptr) - 1]) ) проверяет, является ли последний символ в слове гласной. Если это так, то слово выводится на консоль.
  10. return 0; определяет результат работы программы. Если программа успешно завершилась, то возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы