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

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

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

Нужно найти слова, у которых совпадают первый и последний символы, посчитать их количество и вывести сами слова. Подскажите, в чем ошибка. Работа программы завершается аварийно. Судя по всему, while начинает работать бесконечно. Не пойму, почему так происходит. Язык Си. Спасибо
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. const int n =[/COLOR] 30;
  7. int i = 0, j, k = 0;
  8. char text[n];
  9. scanf("%s", text);
  10. while (i < n)
  11. {
  12. char word[27]; //27 - кол-во символов в самом длинном английском слове
  13. for (j = i; j < n; j++)
  14. {
  15. if (text[j] != ' ')
  16. strncat(word, text, 2);
  17. else
  18. {
  19. if (word[0] == word[j])
  20. {
  21. printf("%s\n", word);
  22. k += 1;
  23. }
  24. break;
  25. }
  26. }
  27. i = j + 1;
  28. }
  29. printf("%i", k);
  30. return 0;
  31. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 255
  4. #define DELIM " ,.\t\n"
  5. int main(void)
  6. {
  7.     int c=0;
  8.     char *p=NULL, *k;
  9.     char str[N]="Lorem ipsumi dolord sit amet, consectetur adipiscing elit, sed do...";
  10.     for (p = strtok(str, DELIM); p; p = strtok(NULL, DELIM))
  11.     {
  12.     k=p;
  13.         while(*++k);
  14.         --k;
  15.         if (*k==*p)
  16.         {
  17.             ++c;
  18.             printf("%s\n", p);
  19.         }
  20.     }
  21. printf("Kol. slov: %d\n", c);
  22. return 0;
  23. }

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

В этом коде:

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы