Найти в строке кратчайшее симметричное слово - C (СИ)
Формулировка задачи:
Помогите пожалуйста, найти в строке кратчайшее симметрическое слово.
Решение задачи: «Найти в строке кратчайшее симметричное слово»
textual
Листинг программы
#include <string.h> #include <stdio.h> #define DELIM " ,.?!;:" int main() { char str[] = "qteyu zxcdfdcxz iutrg vbv alskdjrtrt sdfg kjhlhjk"; char *p, *start, *end, *res = NULL; int len, flag, min, flag_min = 0; for(p = strtok(str, DELIM); p; p = strtok(NULL, DELIM)){ len = strlen(p); for(start = p, end = p + len - 1, flag = 0; start < end; ){ if(*start++ != *end--){ flag = 1; break; } } if(!flag){ if(!flag_min){ min = len; flag_min = 1; res = p; } else{ if(len < min){ min = len; res = p; } } } } if(!res) puts("Not found"); else puts(res); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы со строками и вводом-выводом
- Определяем разделитель, в данном случае пробел, запятая, точка, восклицательный и вопросительный знаки, точка с запятой и двоеточие
- Объявляем переменные: — str — исходная строка — p — указатель на текущий символ в строке — start — указатель на первый символ в текущем слове — end — указатель на последний символ в текущем слове — res — указатель на найденное симметричное слово (результат) — len — длина текущего слова — flag — флаг наличия нечетных символов в текущем слове — min — минимальная длина среди найденных симметричных слов — flag_min — флаг наличия минимальной длины среди найденных симметричных слов
- Используем функцию strtok для разделения исходной строки по разделителям и получения указателя на первое слово
- Проверяем длину текущего слова и инициализируем указатели start и end на первый и последний символы текущего слова соответственно
- Проходим по всем символам текущего слова, сравнивая их и проверяя на нечетность (если слово должно быть симметричным, то все его символы должны быть четными или нечетными)
- Если текущий символ нечетный и предыдущий символ четный, то это означает, что текущее слово не является симметричным, и мы переходим к следующему слову
- Если текущее слово является симметричным, то проверяем его длину и обновляем значения min и flag_min, если текущая длина меньше или равна min
- Если текущее слово является симметричным и его длина меньше или равна min, то оно становится новым симметричным словом с минимальной длиной
- После прохода по всем словам в исходной строке выводим сообщение о том, что симметричное слово не найдено, если res равно NULL, или выводим найденное симметричное слово, если res не равно NULL
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д