Найти множество всех слов, которые встречаются в каждом из двух заданных предложений - C (СИ)
Формулировка задачи:
Здравствуйте. Есть код:
Почему при заполнении второго массива (dictionary_2) его значения записываются и в первый массив (dictionary_1)?
/*Найти множество всех слов, которые встречаются в
* каждом из двух заданных предложений*/
#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;
}Решение задачи: «Найти множество всех слов, которые встречаются в каждом из двух заданных предложений»
textual
Листинг программы
strcpy(dictionary_1[n1], tmp);
Объяснение кода листинга программы
- В данной строке кода используется функция
strcpy(), которая предназначена для копирования строки. - Первый аргумент функции
strcpy()- это указатель на массив символов, в который необходимо скопировать строку. - Второй аргумент функции
strcpy()- это указатель на строку, которую необходимо скопировать. - В данном случае,
dictionary_1[n1]- это указатель на массив символов, в который будет скопирована строка. tmp- это указатель на временную переменную, которая содержит строку, которую необходимо скопировать.- Значение
n1- это индекс в массивеdictionary_1, куда будет скопирована строка. - В результате выполнения данной строки кода, в массиве
dictionary_1будет скопирована строка из переменнойtmp.