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