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