Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 49
1

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

31.10.2017, 15:49. Показов 690. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста ) я даже примерно не знаю как делать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2017, 15:49
Ответы с готовыми решениями:

Найти множество всех слов, которые встречаются в каждом из двух заданных предложений
Здравствуйте. Есть код: /*Найти множество всех слов, которые встречаются в * каждом из двух...

Найти все слова, которые встречаются в предложении 1 раз
помогите пожалуйста : дано предложение выписать все слова которые встречаются в нем 1 раз на си

Напечатать все слова, которые встречаются в последовательности по одному разу
Сам попробовал написать код,но везде одни ошибки. #include <stdio.h> #include <stdlib.h>...

Напечатать все слова, которые встречаются в последовательности по одному разу
Вообщем дана строка в файле,задача Напечатать все слова, которые встречаются в последовательности...

3
30 / 36 / 9
Регистрация: 16.10.2017
Сообщений: 137
31.10.2017, 16:27 2
Цитата Сообщение от Melnichenko Посмотреть сообщение
я даже примерно не знаю как делать
Если "в лоб" и не оптимально, зато элементарно, то можно через strtok(_r) разбить ожно прндложение по словам. Потом самый обычный strstr для поиска.
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
31.10.2017, 19:12 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <string.h>
#define MAX_WS  64
#define MAX_PS  2
char* token(char** s, const char* ds);
int   get_lexs(char* s, char* arr[], int num, const char* delim);
void  sort_words(char* arr[], int num);
void  intersect(FILE* _out, char* a[], int n1, char* b[], int n2);
 
int main(void){
    char* ws1[MAX_WS], *ws2[MAX_WS], *ps[MAX_PS];
    int   n1, n2;
 
    char s[] = "F#, Go, Erlang, Go, Haskell! Python, Go, Erlang, Go, F# Go...";
 
    const char delim[] = " \t\n,;";
    if(get_lexs(s, ps, MAX_PS, ".!?:") != MAX_PS)
        return 1;
 
    n1 = get_lexs(ps[0], ws1, MAX_WS, delim);
    n2 = get_lexs(ps[1], ws2, MAX_WS, delim);
    sort_words(ws1, n1);
    sort_words(ws2, n2);
    intersect(stdout, ws1, n1, ws2, n2);
    getchar();
    return 0;
}
 
//пересечение
void intersect(FILE* _out, char* a[], int n1, char* b[], int n2){
    int ret, i = 0, j = 0;
    char* prev = NULL;
    while((i < n1) && (j < n2)){
        ret = strcmp(a[i], b[j]);
        if(ret < 0)
            ++i;
        else if(ret > 0)
            ++j;
        else {
            if((prev == NULL) || strcmp(a[i], prev) != 0)
                fprintf(_out, "%s ", a[i]);
            prev = a[i];
            ++i;
            ++j;
        }
    }
}
 
//сортировка слов вставкой
void sort_words(char* arr[], int num){
    int   i, j;
    char* k;
    for(i = 1; i < num; ++i){
        k = arr[i];
        j = i - 1;
        while((j >= 0) && (strcmp(arr[j], k) > 0)){
            arr[j + 1] = arr[j];
            --j;
        }
        arr[j + 1] = k;
    }
}
 
//разделение строки
char* token(char** s, const char* ds){
    const char* i;
    char* t = NULL, *p = *s;
    for(; *p; ++p){
        for(i = ds; *i && (*i != *p); ++i)
            ;
        if(!*i)
            break;
    }
 
    for(t = p; *p; ++p){
        for(i = ds; *i && (*i != *p); ++i)
            ;
        if(*i)
            break;
    }
 
    if(*p)
        *p++ = '\0';
    *s = p;
    return (t == p) ? NULL : t;
}
 
int get_lexs(char* s, char* arr[], int num, const char* delim){
    char* p, *w;
    int i = 0;
    for(p = s; (w = token(&p, delim)) != NULL; ){
        if(i < num)
            arr[i++] = w;
        else
            break;
    }
    return i;
}
0
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 49
01.11.2017, 15:27  [ТС] 4
мне нужно чтобы предложения водить с клавиатуры )

Добавлено через 12 минут
на подобии этого , только тут она неправильно выводит слова
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*Найти множество всех слов, которые встречаются в 
 * каждом из двух заданных предложений*/
#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;
}
Добавлено через 7 часов 39 минут
спасибо большое все , но у же не нужна в этом задание помощь я все решила ))
0
01.11.2017, 15:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2017, 15:27
Помогаю со студенческими работами здесь

Напечатать все слова, которые встречаются в последовательности более одного раза
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных русских...

Напечатать все слова, которые встречаются в строке только по одному разу.
Вот такая вот задача: Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5...

Напечатать все слова предложения которые встречаются ровно один раз
Дано предложение, состоящее из слов, разделенных пробелами. Напечатать все слова, которые...

Напечатать все слова, которые встречаются в нем ровно один раз
Здравствуйте. Помогите, пожалуйста, с задачей. Условие: Дано предложение, состоящее из слов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru