Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран - C (СИ)
Формулировка задачи:
Дана строка длиной n символов, содержащая слова, т.е. группы
символов, разделенные пробелами и другими разделителями (знаками
препинания) и не содержащие пробелов внутри себя.
Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран.
Помогите, пожалуйста. Заранее спасибо!
Решение задачи: «Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- static char last_char(const char* s);
- int print_words(FILE* _out, const char* s);
- int main(void){
- char s[] = "PASCAL, PERL, PYTHON, ALGOL, LISP, SNOBOL, APL...";
- int m = print_words(stdout, s);
- printf("count words: %d\n", m);
- return 0;
- }
- int print_words(FILE* _out, const char* s){
- int n = 0, m = 0;
- char c = last_char(s);
- while(*s){
- n = 0;
- sscanf(s, "%*[^a-zA-Z]%n", &n);
- s += n;
- if(!*s)
- break;
- sscanf(s, "%*[a-zA-Z]%n", &n);
- if(*(s + (n - 1)) == c){
- fprintf(_out, "%.*s\n", n, s);
- ++m;
- }
- s += n;
- }
- return m;
- }
- static char last_char(const char* s){
- const size_t n = strlen(s);
- const char* p = (n > 0) ? s + (n - 1) : s;
- while((p >= s) && !isalpha(*p))
- --p;
- return (p > s) ? *p : '\0';
- }
Объяснение кода листинга программы
В этом коде:
- Объявлены три функции:
last_char
,print_words
иmain
. - В функции
main
инициализируется массивs
строкойPASCAL, PERL, PYTHON, ALGOL, LISP, SNOBOL, APL...
. - Вызывается функция
print_words
с аргументамиstdout
иs
. - Результат работы функции
print_words
присваивается переменнойm
, которая выводится на экран. - В функции
print_words
инициализируются две переменные:n
иm
со значением 0. - Определяется значение последней буквы строки
s
с помощью функцииlast_char
. - В цикле
while
происходит чтение строкиs
. - Внутри цикла переменной
n
присваивается значение количества символов, которые не являются буквами, а переменнойs
сдвигается на следующую позицию. - Если текущий символ не является буквой, то в переменную
n
считывается количество символов, которые являются буквами. - Если текущий символ является буквой, то проверяется, равна ли последняя буква строки этой букве.
- Если условие выполняется, то текущее слово выводится на экран и к переменной
m
прибавляется единица. - После выхода из цикла, возвращается значение переменной
m
. - В функции
last_char
определяется позиция последней буквы строкиs
. - Если строка пустая, то возвращается 0.
- Если текущий символ не является буквой, то сдвигаемся на предыдущую позицию и повторяем проверку.
- Если текущий символ является буквой, то возвращается он.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д