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