Выделение и сравнение слов из двух строк - 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];
          }
       }
}

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

  1. Объединение двух строк с помощью оператора конкатенации ``.
  2. Разделение каждой строки на слова с использованием функции strtok() и разделителя .,:;!?.
  3. Сравнение каждого слова из первой строки со всеми словами из второй строки с использованием функции strcmp().
  4. Если слова совпадают, проверяется его длина, и если она больше текущей максимальной длины, то обновляется значение переменной lmax и указывается на это слово как на наибольшее общее.
  5. В конце функция возвращает наибольшее общее слово, если оно существует, иначе возвращает NULL.
  6. В функции main() выводится на экран наибольшее общее слово, если оно найдено, иначе выводится сообщение Наибольшего общего слова не найдено!.

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


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

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

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