Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2017, 07:46   #1
Ekaterina_Andreevn
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 19
По умолчанию Найти все слова, которые встречаются в каждом из двух заданных предложений - 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;
}
вот программа , ну она почему-то не правильно выводит слова, помогите исправить

Последний раз редактировалось Аватар; 01.11.2017 в 08:52.
Ekaterina_Andreevn вне форума Ответить с цитированием
Старый 01.11.2017, 08:21   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

click me
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.11.2017, 14:59   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Хорошенько протестируй:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define count 50
#define length 20

int n1 = 0, n2 = 0;
char *separators = ",;:()-\" .!?";

int main(void)
{
	char **dictionary_1, **dictionary_2, *tmp = NULL, line1[30], line2[30];
	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(line1);
	tmp = strtok(line1, separators);
	while (tmp != NULL)
	{
		dictionary_1[n1] = tmp;	
		n1++;
		tmp = strtok(NULL, separators);		
	}
	tmp = NULL;
	fflush(stdin);
	printf("Enter a second line: ");
	gets(line2);
	tmp = strtok(line2, separators);
	while (tmp != NULL)
	{
		dictionary_2[n2] = tmp;
		n2++;
		tmp = strtok(NULL, separators);
	}
		
	printf("Match: ");
	for (int i = 0; i < n1; i++)
	{
		for (int j = 0; j < n2; j++)
		{
			if (strcmp(dictionary_1[i], dictionary_2[j]) == 0)
			{
				printf("%s + %s\n", dictionary_1[i], dictionary_2[j]);
			}
		}
	}

	
	gets(line1);  // чтобы консоль не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 08.11.2017, 16:12   #4
Ekaterina_Andreevn
Пользователь
 
Регистрация: 14.10.2017
Сообщений: 19
По умолчанию

скажите пожалуйста что значит вот это
dictionary_1[i] = (char *)malloc(length * sizeof(char));
dictionary_2[i] = (char *)malloc(length * sizeof(char));
Ekaterina_Andreevn вне форума Ответить с цитированием
Старый 08.11.2017, 17:30   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://en.cppreference.com/w/c/memory/malloc
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]: найти множество всех слов, которые встречаются в каждом из заданных предложений. SEXTANT Помощь студентам 1 18.12.2016 11:37
[Delphi]: найти множество всех слов, которые встречаются в каждом из заданных предложений SEXTANT Помощь студентам 0 05.12.2016 21:38
Напечатать множество слов,которые встречаются в каждом из двух заданных предложений. masjanja55 Помощь студентам 2 08.02.2011 12:38