Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран - 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.
- Если текущий символ не является буквой, то сдвигаемся на предыдущую позицию и повторяем проверку.
- Если текущий символ является буквой, то возвращается он.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д