Выделение и сравнение слов из двух строк - C (СИ)
Формулировка задачи:
По какой причине не работает функция proces? Подскажите, пожалуйста
#include <stdio.h> #include <string.h> #include <conio.h> #define LEN 80 #define NUM_W 40 void proces(char *str1, char *str2, char *pwmax); void main(void) {int k, l, lmax, m, j = 0, i = 0; char str1[LEN], str2[LEN], pwmax[20], *w1[NUM_W], *w2[NUM_W]; char *divide = ".,:;!? "; pwmax[0] = NULL; clrscr(); puts("\n Введите 1 строку: "); gets(str1); puts("\n Введите 2 строку: "); gets(str2); proces(str1, str2, pwmax); if(pwmax) {puts("\n Наибольшее общее слово: "); puts(pwmax); } else puts(" Наибольшего общего слова не найдено!"); getch(); } void proces(char *str1, char *str2, char *pwmax) {char *w1[NUM_W], *w2[NUM_W]; int k, l, lmax = 0, m, j = 0, i = 0; char *divide = ".,:;!? "; w1[i] = strtok(str1, divide); while ((w1[++i] = strtok(NULL, divide))); w2[j] = strtok(str2, divide); while((w2[++j] = strtok(NULL, divide))); for (k = 0; k < i; k++) for (m = 0; m < j; m++) if(strcmp(w1[k], w2[m]) == 0) { l = strlen(w1[k]); if(l > lmax) { lmax = l; pwmax = w1[k]; } } }
Решение задачи: «Выделение и сравнение слов из двух строк»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <conio.h> #define LEN 80 #define NUM_W 40 char proces(char *str1, char *str2, char *pwmax); void main(void) {int k, l, lmax, m, j = 0, i = 0; char *p, str1[LEN], str2[LEN], *pwmax, *w1[NUM_W], *w2[NUM_W]; char *divide = ".,:;!? "; pwmax = NULL; clrscr(); puts("\n Введите 1 строку: "); gets(str1); puts("\n Введите 2 строку: "); gets(str2); p=proces(str1, str2, pwmax); if(p) {puts("\n Наибольшее общее слово: "); puts(p); } else puts(" Наибольшего общего слова не найдено!"); getch(); } char proces(char *str1, char *str2, char *pwmax) {char *w1[NUM_W], *w2[NUM_W]; int k, l, lmax = 0, m, j = 0, i = 0; char *divide = ".,:;!? "; w1[i] = strtok(str1, divide); while ((w1[++i] = strtok(NULL, divide))); w2[j] = strtok(str2, divide); while((w2[++j] = strtok(NULL, divide))); for (k = 0; k < i; k++) for (m = 0; m < j; m++) if(strcmp(w1[k], w2[m]) == 0) { l = strlen(w1[k]); if(l > lmax) { lmax = l; pwmax = w1[k]; } } }
Объяснение кода листинга программы
- Объединение двух строк с помощью оператора конкатенации ``.
- Разделение каждой строки на слова с использованием функции strtok() и разделителя
.,:;!?
. - Сравнение каждого слова из первой строки со всеми словами из второй строки с использованием функции strcmp().
- Если слова совпадают, проверяется его длина, и если она больше текущей максимальной длины, то обновляется значение переменной lmax и указывается на это слово как на наибольшее общее.
- В конце функция возвращает наибольшее общее слово, если оно существует, иначе возвращает NULL.
- В функции main() выводится на экран наибольшее общее слово, если оно найдено, иначе выводится сообщение
Наибольшего общего слова не найдено!
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д