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