Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество - 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;
- }
Объяснение кода листинга программы
В этом коде:
- Подключаются необходимые библиотеки
- Задается значение константы N, которая определяет максимально допустимую длину строки
- Задается значение константы DELIM, которая определяет разделитель строк
- Объявляются переменные c, p и k
- Переменная c инициализируется значением 0
- Переменная p инициализируется значением NULL
- Переменная k инициализируется значением NULL
- Переменная str инициализируется строкой
Lorem ipsumi dolord sit amet, consectetur adipiscing elit, sed do...
. Длина строки не превышает значение N. - В цикле for происходит разделение строки на слова с помощью функции strtok. Каждое слово помещается в переменную p.
- В каждой итерации цикла переменная k инициализируется значением p.
- Затем в цикле while происходит проход по каждому символу слова, начиная со второго символа (индекс 1). Конец цикла обозначается отсутствием символа (значение NULL).
- После окончания цикла while значение переменной k уменьшается на 1, чтобы вернуться к последнему символу слова.
- Проверяется совпадение первого и последнего символов слова с помощью оператора ==.
- Если совпадение найдено, значение переменной c увеличивается на 1.
- Выводится слово, которое удовлетворяет условию.
- По завершении цикла for выводится общее количество найденных слов.
- Программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д