Найти расстояние между двумя данными словами - 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;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы: stdio.h, stdlib.h, string.h
- Объявляем переменные: text[256] - строка для ввода, delimiters[] =
:;/\[]{}()``'',.!?
- разделители, word[256] - массив для хранения слов, i, j, n, kmax, k - счетчики и максимальные значения. - Считываем строку с помощью функции gets(text).
- Используем функцию strtok для разделения строки на слова и сохраняем их в массив word.
- Используем два вложенных цикла для поиска пары слов с максимальным расстоянием.
- Внутренний цикл перебирает все слова, начиная с текущего внешнего цикла.
- Используем функцию rasstoyanie для вычисления расстояния между двумя словами.
- Если найденное расстояние больше текущего максимального, обновляем значения максимального расстояния и индексов слов.
- Выводим найденные слова с максимальным расстоянием.
- Функция rasstoyanie сравнивает два слова построчно, пока не будет достигнута одна из границ строки.
- Если символы текущих позиций двух строк не совпадают, увеличиваем счетчик расстояния.
- Если текущая позиция внутреннего цикла равна длине строки s, переходим к следующей итерации внешнего цикла.
- Если текущая позиция внутреннего цикла равна длине строки m, переходим к следующей итерации внешнего цикла.
- Возвращаем значение k, которое является расстоянием между двумя словами.
- В основной функции выводим найденное расстояние и два слова с максимальным расстоянием.
- Используем функцию getchar для ожидания нажатия клавиши и возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д