Найти расстояние между двумя данными словами - C (СИ)

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

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

Добрый день. Являюсь студентом 1-го курса факультета кибернетики, и основным предметом (как ни странно) является программирование на языке С. Осваивая (школу окон4ил 8 лет назад) разделы математики (алгебра, геометрия, дискретка, матан), не успеваю заняться основным предметом (сам программирую с недавних пор на РНР) Так вот у меня есть просьба - помочь с лабораторной (а если быть точнее - решить ее за меня). Помогите начинающему коллеге - я же, в свою очередь, внесу вклад в развитие

Тема:

Обработка строк.

Словами будем называть лексемы. Предложение – это определенная последовательность слов. Серией называются слова в однобуквенном алфавите. Характеристика слова – это длина максимальной серии, что содержится в нем. Расстоянием между двумя словами называется количество позиций, в которых различаются эти слова. Два слова похожи, если множества их букв совпадают.

Задание

Найти расстояние между двумя данными словами. В предложении найти пару самых удаленных слов.

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    char text[256];
    char delimiters[] = " :;/\[]{}()""'',.!?";
    char *word[256];
    char imax,jmax;
    int i=0,j,n,kmax=0,k=0;
 
 
    gets(text);
    char *p_end = strtok(text, delimiters);
    while (p_end != NULL) // считываем слова с клавиатуры и записываем их в массив
    {
        word[i]=p_end;
        i++;
        p_end = strtok(NULL, delimiters);
 
    }
    n=i;
 
    for(i=0;i<n-1;i++) //находим пару самых удаленных слов
    {
        for(j=i+1;j<n;j++)
            {
                k=rasstoyanie(word[i],word[j]);
                if(k>kmax){kmax=k;imax=i;jmax=j;}
            }
    }
    printf("%d\n",k);
    printf("%s\n",word[imax]);
    printf("%s\n",word[jmax]);
 
    getchar();
    return 0;
}
int rasstoyanie(char *m, char *s)// функция считающая расстояние между двумя словами
{
    int i=0,k=0,a,b;
    a=strlen(m);//длина строки m
    b=strlen(s);//длина строки s
   while(1)
   {
       if(s[i]!=m[i]) {k++;}
       i++;
       if(i==b) {k=k+(a-b);break;}
       if(i==a) {k=k+(b-a);break;}
   }
    return k;
}

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

  1. Включаем необходимые заголовочные файлы: stdio.h, stdlib.h, string.h
  2. Объявляем переменные: text[256] - строка для ввода, delimiters[] = :;/\[]{}()``'',.!? - разделители, word[256] - массив для хранения слов, i, j, n, kmax, k - счетчики и максимальные значения.
  3. Считываем строку с помощью функции gets(text).
  4. Используем функцию strtok для разделения строки на слова и сохраняем их в массив word.
  5. Используем два вложенных цикла для поиска пары слов с максимальным расстоянием.
  6. Внутренний цикл перебирает все слова, начиная с текущего внешнего цикла.
  7. Используем функцию rasstoyanie для вычисления расстояния между двумя словами.
  8. Если найденное расстояние больше текущего максимального, обновляем значения максимального расстояния и индексов слов.
  9. Выводим найденные слова с максимальным расстоянием.
  10. Функция rasstoyanie сравнивает два слова построчно, пока не будет достигнута одна из границ строки.
  11. Если символы текущих позиций двух строк не совпадают, увеличиваем счетчик расстояния.
  12. Если текущая позиция внутреннего цикла равна длине строки s, переходим к следующей итерации внешнего цикла.
  13. Если текущая позиция внутреннего цикла равна длине строки m, переходим к следующей итерации внешнего цикла.
  14. Возвращаем значение k, которое является расстоянием между двумя словами.
  15. В основной функции выводим найденное расстояние и два слова с максимальным расстоянием.
  16. Используем функцию getchar для ожидания нажатия клавиши и возвращаем 0, чтобы указать, что программа успешно завершилась.

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


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

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

9   голосов , оценка 3.556 из 5
Похожие ответы