Найти множество всех слов, которые встречаются в каждом из двух заданных предложений - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть код:
/*Найти множество всех слов, которые встречаются в 
 * каждом из двух заданных предложений*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define count 50
#define length 20
 
int n1 = 0, n2 = 0;
char *separators = ",;:()-\" .!?";
int Contains(char *word, int n, char **dictionary)
{
    int i;
    if (n == 0) return 0;
    for (i = 0; i < n; i++)
    {
        if (strcmp(word, dictionary[i]) == 0) return 1;
    }
    return 0;
}
 
int main(void)
{
    char **dictionary_1, **dictionary_2, *tmp = NULL, *line = malloc(count*length);
    int i;
    dictionary_1 = (char**)malloc(count * sizeof(char *));
    dictionary_2 = (char**)malloc(count * sizeof(char *));
    for (i = 0; i < count; i++)
    {
        dictionary_1[i] = (char *)malloc(length * sizeof(char));
        dictionary_2[i] = (char *)malloc(length * sizeof(char));
    }
    fflush(stdin);
    printf("Enter a first line: ");
    gets(line);
    tmp = strtok( line, separators );
    while( tmp != NULL ) 
    {
        if (!Contains(tmp, n1, dictionary_1)) 
        {
            dictionary_1[n1] = tmp;
            n1++;
        }
        tmp = strtok( NULL, separators );
    }
    tmp = NULL;
    fflush(stdin);
    printf("Enter a second line: ");
    gets(line);
    tmp = strtok( line, separators );
    while( tmp != NULL ) 
    {
        if (!Contains(tmp, n2, dictionary_2)) 
        {
            dictionary_2[n2] = tmp;
            n2++;
        }
        tmp = strtok( NULL, separators );
    }
    printf("Match: ");
    for (i = 0; i < n2; i++)
    {
        printf("%s + %s\n", dictionary_1[i], dictionary_2[i]);
    }
    return 0;
}
Почему при заполнении второго массива (dictionary_2) его значения записываются и в первый массив (dictionary_1)?

Решение задачи: «Найти множество всех слов, которые встречаются в каждом из двух заданных предложений»

textual
Листинг программы
strcpy(dictionary_1[n1], tmp);

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

  1. В данной строке кода используется функция strcpy(), которая предназначена для копирования строки.
  2. Первый аргумент функции strcpy() - это указатель на массив символов, в который необходимо скопировать строку.
  3. Второй аргумент функции strcpy() - это указатель на строку, которую необходимо скопировать.
  4. В данном случае, dictionary_1[n1] - это указатель на массив символов, в который будет скопирована строка.
  5. tmp - это указатель на временную переменную, которая содержит строку, которую необходимо скопировать.
  6. Значение n1 - это индекс в массиве dictionary_1, куда будет скопирована строка.
  7. В результате выполнения данной строки кода, в массиве dictionary_1 будет скопирована строка из переменной tmp.

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


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

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

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