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

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

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

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

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

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

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

В этом коде:

  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
Похожие ответы