Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество - C (СИ)

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

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

Нужно найти слова, у которых совпадают первый и последний символы, посчитать их количество и вывести сами слова. Подскажите, в чем ошибка. Работа программы завершается аварийно. Судя по всему, while начинает работать бесконечно. Не пойму, почему так происходит. Язык Си. Спасибо
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    const int n =[/COLOR] 30;
    int i = 0, j, k = 0;
    char text[n];
    scanf("%s", text);
    while (i < n)
    {
        char word[27]; //27 - кол-во символов в самом длинном английском слове
        for (j = i; j < n; j++)
        {
            if (text[j] != ' ')
                strncat(word, text, 2);
            else
            {
                if (word[0] == word[j])
                {
                    printf("%s\n", word);
                    k += 1;
                }
                break;
            }
        }
        i = j + 1;
    }
    printf("%i", k);
    return 0;
}

Решение задачи: «Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define N 255
#define DELIM " ,.\t\n"
int main(void)
{
    int c=0;
    char *p=NULL, *k;
    char str[N]="Lorem ipsumi dolord sit amet, consectetur adipiscing elit, sed do...";
    for (p = strtok(str, DELIM); p; p = strtok(NULL, DELIM))
    {
    k=p;
        while(*++k);
        --k;
        if (*k==*p)
        {
            ++c;
            printf("%s\n", p);
        }
    }
printf("Kol. slov: %d\n", c);
return 0;
}

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

В этом коде:

  1. Подключаются необходимые библиотеки
  2. Задается значение константы N, которая определяет максимально допустимую длину строки
  3. Задается значение константы DELIM, которая определяет разделитель строк
  4. Объявляются переменные c, p и k
  5. Переменная c инициализируется значением 0
  6. Переменная p инициализируется значением NULL
  7. Переменная k инициализируется значением NULL
  8. Переменная str инициализируется строкой Lorem ipsumi dolord sit amet, consectetur adipiscing elit, sed do.... Длина строки не превышает значение N.
  9. В цикле for происходит разделение строки на слова с помощью функции strtok. Каждое слово помещается в переменную p.
  10. В каждой итерации цикла переменная k инициализируется значением p.
  11. Затем в цикле while происходит проход по каждому символу слова, начиная со второго символа (индекс 1). Конец цикла обозначается отсутствием символа (значение NULL).
  12. После окончания цикла while значение переменной k уменьшается на 1, чтобы вернуться к последнему символу слова.
  13. Проверяется совпадение первого и последнего символов слова с помощью оператора ==.
  14. Если совпадение найдено, значение переменной c увеличивается на 1.
  15. Выводится слово, которое удовлетворяет условию.
  16. По завершении цикла for выводится общее количество найденных слов.
  17. Программа возвращает 0, что означает успешное выполнение.

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


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

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

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