Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество - 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, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д