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