Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
silymarin
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 2
1

Вывести таблицу с указанием трех наиболее часто встречающихся слов

15.12.2015, 20:18. Просмотров 861. Ответов 2
Метки нет (Все метки)

Помогите пожалуйста!
Написать программу, получающую строку текста и возвращающую таблицу с указанием трех наиболее часто встречающихся слов и количества их повторений в строке.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2015, 20:18
Ответы с готовыми решениями:

Получить 10 наиболее часто встречающихся слов и число их появлений
Помогите с задачей пожалуйста Дан текстовый файл f, содержащий произвольный...

В заданном тексте найти 20 наиболее часто встречающихся слов
Задача: Одним из способов идентификации автора литературного произведения –...

100 наиболее часто встречающихся слов и число из появлений в тексте
Здравствуйте! Очень нужна помощь. Программа по теме файлы. Дан текст, для...

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

Получить 10 наиболее часто встречающихся букв и число их появления
Дан символьный файл f, содержащий произвольный текст. Получить 10 наиболее...

2
Геомеханик
788 / 595 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
15.12.2015, 21:32 2
Лучший ответ Сообщение было отмечено silymarin как решение

Решение

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
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define  N   32
 
typedef struct abc {
    const char*  key;
    int cnt;
    struct abc*  next;
} abc_t;
void   abc_init(abc_t* arr[], int num);
abc_t* abc_insert(abc_t* arr[], int num, const char* key);
void   abc_clear(abc_t* arr[], int num);
void   abc_print(FILE* _out, abc_t* arr[], int num, int m);
 
 
int main(void){
    abc_t* a[N], *p;
    char*  i;
    char   s[] = "APL, PHP, LISP, ADA, APL PHP, PERL, ADA, FORTH, APL, PHP, APL";
 
    abc_init(a, N);
    for(i = strtok(s, " ,.\t\n"); i != NULL; i = strtok(NULL, " ,.\t\n")){
        p = abc_insert(a, N, i);
        if(p != NULL)
            ++(p->cnt);
        else
            break;
    }
    abc_print(stdout, a, N, 3);
    abc_clear(a, N);
    return 0;
}
 
//инициализация
void abc_init(abc_t* arr[], int num){
    int i;
    for(i = 0; i < num; ++i)
        arr[i] = NULL;
}
 
//вставка
abc_t* abc_insert(abc_t* arr[], int num, const char* key){
    abc_t* p;
    const char* s;
    unsigned int k = 0;
    for(s = key; *s; ++s)
        k += (unsigned int)*s;
    k %= num;
    
    for(p = arr[k]; p != NULL; p = p ->next){
        if(! strcmp(p->key, key))
            return p;
    }
 
    p = (abc_t*)malloc(sizeof(abc_t));
    if(p != NULL){
        p->key  = key;
        p->cnt  = 0;
        p->next = arr[k];
        arr[k]  = p;
    }
    return p;
}
 
//удаление всего
void abc_clear(abc_t* arr[], int num){
    int    i;
    abc_t* t;
    for(i = 0; i < num; ++i){
        while(arr[i] != NULL){
            t = arr[i];
            arr[i] = arr[i]->next;
            free(t);
        }
    }
}
 
//печать
void abc_print(FILE* _out, abc_t* arr[], int num, int m){
    int    j, i;
    abc_t* p, *k, *s = NULL;
 
    for(i = 0; i < num; ++i){
        if(arr[i] != NULL){
            s = arr[i];
            break;
        }
    }
    if(s == NULL)
        return;
 
    m = (m > num) ? num : m;
    for(j = 0; j < m; ++j){
        k = s;
        for(i = 0; i < num; ++i){
            for(p = arr[i]; p != NULL; p = p->next){
                if(p->cnt > k->cnt)
                    k = p;
            }
        }
        if(k->cnt > 0){
            fprintf(_out, "word: %s (%d)\n", k->key, k->cnt);
            k->cnt = 0;
        }
    }
}
Пример работы кода
1
volodin661
1804 / 863 / 148
Регистрация: 10.12.2013
Сообщений: 2,969
16.03.2016, 01:59 3
балуюсь:

Perl
1
2
Bag(.comb(/\w+/)).sort(-*.value)[^3].say
given "APL, PHP, LISP, ADA, APL PHP, PERL, ADA, FORTH, APL, PHP, APL";
Кликните здесь для просмотра всего текста
(APL => 4 PHP => 3 ADA => 2)

1 строка против 100, но и отработало на 2 порядкa медленнее ( 0.2s против 0.004s )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 01:59

Вывести на экран список слов с указанием их длины
1. Задан текст, состоящий из отдельных слов. Длина текста - не более 80...

Удаление из массива наиболее часто встречающегося значения
Возникла проблема, в информатике шарю очень мало, что очень обидно, а...

В тексте найти символы, встречающиеся наиболее часто
В тексте найти символы, встречающиеся наиболее часто. Символы вводятся с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru