Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество - 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, что означает успешное выполнение.