Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран - 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'; 
}

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

В этом коде:

  1. Объявлены три функции: last_char, print_words и main.
  2. В функции main инициализируется массив s строкой PASCAL, PERL, PYTHON, ALGOL, LISP, SNOBOL, APL....
  3. Вызывается функция print_words с аргументами stdout и s.
  4. Результат работы функции print_words присваивается переменной m, которая выводится на экран.
  5. В функции print_words инициализируются две переменные: n и m со значением 0.
  6. Определяется значение последней буквы строки s с помощью функции last_char.
  7. В цикле while происходит чтение строки s.
  8. Внутри цикла переменной n присваивается значение количества символов, которые не являются буквами, а переменной s сдвигается на следующую позицию.
  9. Если текущий символ не является буквой, то в переменную n считывается количество символов, которые являются буквами.
  10. Если текущий символ является буквой, то проверяется, равна ли последняя буква строки этой букве.
  11. Если условие выполняется, то текущее слово выводится на экран и к переменной m прибавляется единица.
  12. После выхода из цикла, возвращается значение переменной m.
  13. В функции last_char определяется позиция последней буквы строки s.
  14. Если строка пустая, то возвращается 0.
  15. Если текущий символ не является буквой, то сдвигаемся на предыдущую позицию и повторяем проверку.
  16. Если текущий символ является буквой, то возвращается он.

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


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

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

14   голосов , оценка 4.071 из 5
Похожие ответы