Найти в строке кратчайшее симметричное слово - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, найти в строке кратчайшее симметрическое слово.

Решение задачи: «Найти в строке кратчайшее симметричное слово»

textual
Листинг программы
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define DELIM " ,.?!;:"
  4. int main()
  5. {
  6.     char str[] = "qteyu zxcdfdcxz iutrg vbv alskdjrtrt sdfg kjhlhjk";
  7.     char *p, *start, *end, *res = NULL;
  8.     int len, flag, min, flag_min = 0;
  9.     for(p = strtok(str, DELIM); p; p = strtok(NULL, DELIM)){
  10.         len = strlen(p);
  11.         for(start = p, end = p + len - 1, flag = 0; start < end; ){
  12.             if(*start++ != *end--){
  13.                 flag = 1;
  14.                 break;
  15.             }
  16.         }
  17.         if(!flag){
  18.             if(!flag_min){
  19.                 min = len;
  20.                 flag_min = 1;
  21.                 res = p;
  22.             }
  23.             else{
  24.                 if(len < min){
  25.                     min = len;
  26.                     res = p;
  27.                 }
  28.             }
  29.         }
  30.     }
  31.     if(!res)
  32.         puts("Not found");
  33.     else
  34.         puts(res);
  35. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы со строками и вводом-выводом
  2. Определяем разделитель, в данном случае пробел, запятая, точка, восклицательный и вопросительный знаки, точка с запятой и двоеточие
  3. Объявляем переменные: — str — исходная строка — p — указатель на текущий символ в строке — start — указатель на первый символ в текущем слове — end — указатель на последний символ в текущем слове — res — указатель на найденное симметричное слово (результат) — len — длина текущего слова — flag — флаг наличия нечетных символов в текущем слове — min — минимальная длина среди найденных симметричных слов — flag_min — флаг наличия минимальной длины среди найденных симметричных слов
  4. Используем функцию strtok для разделения исходной строки по разделителям и получения указателя на первое слово
  5. Проверяем длину текущего слова и инициализируем указатели start и end на первый и последний символы текущего слова соответственно
  6. Проходим по всем символам текущего слова, сравнивая их и проверяя на нечетность (если слово должно быть симметричным, то все его символы должны быть четными или нечетными)
  7. Если текущий символ нечетный и предыдущий символ четный, то это означает, что текущее слово не является симметричным, и мы переходим к следующему слову
  8. Если текущее слово является симметричным, то проверяем его длину и обновляем значения min и flag_min, если текущая длина меньше или равна min
  9. Если текущее слово является симметричным и его длина меньше или равна min, то оно становится новым симметричным словом с минимальной длиной
  10. После прохода по всем словам в исходной строке выводим сообщение о том, что симметричное слово не найдено, если res равно NULL, или выводим найденное симметричное слово, если res не равно NULL

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы