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

Отсортировать слова в порядке убывания частоты их встречаемости

30.05.2014, 14:38. Просмотров 1506. Ответов 2
Метки нет (Все метки)

Вообщем задача такова: Первый файл содержит текст, который под-
лежит анализу(Анализ провел успешно) Второй файл необходимо создать, и записать все слова, встретившиеся в тексте с указанием частоты появления(Сделано) Вот собственно само задание: расположить слова в порядке убывания частоты их встречаемости.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 14:38
Ответы с готовыми решениями:

Упорядочить элементы массива в порядке частоты встречаемости чисел
Всем привет! Есть вопрос по задаче. как упорядочить элементы массива в...

Отсортировать четные строки матрицы Q(10х10) в порядке убывания, а нечетные – в порядке возрастания
Написать программу на си, задание: Отсортировать четные строки матрицы Q(10х10)...

Отсортировать строки матрицы в порядке убывания
Отсортировать строки массива A(6*7) в порядке убывания. Помогите найти ошибку...

Отсортировать строки матрицы в порядке убывания.
нужно на си : Отсортировать строки матрицы А(6х7) в порядке убывания.

Отсортировать четные строки матрицы X (10x9) в порядке убывания, а не четные в порядке возрастания
Отсортировать четные строки матрицы X (10x9) в порядке убывания, а не четные в...

2
kasan
Чорумфанин
342 / 342 / 320
Регистрация: 06.03.2014
Сообщений: 898
30.05.2014, 15:24 2
Надо сортировать - показывайте код, чтоб было понятно как храните слова и частоту
0
VechnyyStudent
0 / 0 / 1
Регистрация: 23.02.2014
Сообщений: 7
30.05.2014, 19:43  [ТС] 3
Лучший ответ Сообщение было отмечено VechnyyStudent как решение

Решение

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include <stdio.h>
#include <stdlib.h>
 
    //Удаляет из строки s1 все символы встречающиеся в строке s2
void squeeze (char s1[], char s2[])
{
        int i, j, k;
        for (i = k = 0; s1[i] != '\0'; i++) {
            for (j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++);
            if (s2[j] == '\0')
                s1[k++] = s1[i];
        }
        s1[k] = '\0';
}
 
    //приведение к нижнему регистру
char to_lower(char *A)
{
    if( A >= 'A' && A <= 'Z')
        return A + ('a' - 'A');
    return A;
}
    //длина строки
int slen(char *p)
{
    int i;
    for(i = 0; p[i] != '\0'; i++);
    return i;
}
 
//сравнение строк по алфавиту
int sequal(char *s1, char *s2)
{
    while ( *s1 && *s2 ){
    if( *s1 < *s2 )
        return -1;
    if( *s1 > *s2 )
        return 1;
    ++s1;
    ++s2;
    }
 
return *s1? -1 : *s2? 1 : 0;//если s1 то s2 иначе 0
}
 
// поиск символа
char *_strchr(char *A, char delim) {
    while ( *A && *A != delim )
        A++;
    return ( *A ) ? (char*) A : 0;
}
 
// Разбиение строки на поля
char *_strtok(char *A, char * delim)
{
    char *H, *T, *R;
    if (A){
        H = A;
        T = H + slen(H);
        for (R = H; R < T; R++)
            if (_strchr(delim, *R))
                *R = '\0';
    }
    while (! *H && H < T)
        H++;
        if (H >= T)
                return 0;
        else
        {
            R = H;
            H += slen(H);
        }
        return R;
}
 
/* Подсчитываем количество слов в тексте */
char word_count(char *A, int n)
{
    int i;
    int k = 0;
    for (i = 0; i < n; i++){
        if (A[i] == ' ' || A[i] == '\n' || A[i] == '\t')
            k++;
    }
    printf("\nKolichestvo slov v texste: %d \n", k + 1);
}
 
int main()
{
    char *A;
    char delim = " ";
    char *ptr[260];
    char sym[260] = { '.', ',', ':', ';', '!', '№', '^', '?', '#', '$', '%',
    '*', '|', '/', '\\', '~', '`', '"', '<', '>', '_', '-', '+', '=', '(', ')',
    '{', '}', '[', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\n'};
    int n = 0;
    int i;
    FILE *file;
    FILE *file2;
 
    /* Открываем файл для подсчёта символов */
    if((file = fopen("1.txt", "r")) == NULL){
        puts("File not found!");
        return 0;
    }
    /* Считаем количество символов до конца файла */
    while(!feof(file)){
        char tmp;
        if((fscanf(file,"%c", &tmp)) == 1){
            n++;
        }
    }
    fclose(file);
 
    // n - file size
    printf("Kolichestvo simvolov N = %d \n \n", n); /* Выводим кол - во символов на экран */
 
    A = malloc (sizeof (char) * (n + 1));
    if((file = fopen("1.txt", "r")) == NULL){ /*Считываем символы из файла*/
        puts("File not found!");
        return 0;
    }
    for (i = 0; i < n; i++){
        fscanf(file,"%c",&A[i]); /* Записываем символы из файла в массив */
        //printf("%c", A[i]);
    }
    fclose(file);
 
    word_count(A, n);//Подсчитываем количество слов в тексте
 
 
//////////////////////
 
    /*приводим к нижнему регистру*/
    i=0;
    while (A[i]!='\0')
    {
        A[i] = to_lower (A[i]);
        i++;
    }
 
    squeeze(A, sym);//Удаляет из строки s1 все символы встречающиеся в строке s2
    //printf("\n%s ", A);
 
 
    char *a[n], *slovo[n], *t;
    int *kolichestvo;
    int j, q, sk, h = 0, d , f;
    t = malloc (sizeof (char) * (n + 1));
    kolichestvo = malloc (sizeof (char) * (n + 1));
    i = 0;
    t = _strtok (A," ");
 
        while (t != NULL){
            a[i] = t;
            t = _strtok (NULL," ");
            i++;
    }
 
    for(j = 0; j < i; j++){
        sk = 0;
        f = 0;
        // подсчитываем количесво одинаковых слов
        for(q = 0; q < i; q++){
            if (sequal(a[j], a[q]) == 0) {
                sk++;
            }
        }
        //printf("%d ",sk);
        // если слово встречалось, то на экран не выводим
        for(d = 0; d < h; d++){
            if (sequal(a[j], slovo[d]) == 0) {
                f++;
            }
        }
        //printf("%d ",f);
        if(f == 0){
            slovo[h] = a[j];// в пустой массив записываем разбитый на слова текст
            kolichestvo[h] = sk;
            if(kolichestvo[h] > 1)
            h++;
        }
        //printf("%d ",h);
    }
    for(j = 0; j < h; j++){
        printf("\nSlovo: %s", slovo[j]);
        printf(" (%d)", kolichestvo[j]);
   }
 
//////////////////////
    A[n] = '\0';
    if ((file2 = fopen("2.txt", "w")) == NULL){
        puts("File not found!");
        return 0;
    }
    for(j = 0; j < h; j++){
        if ((fprintf(file2, "\nSlovo: %s (%d)", slovo[j],kolichestvo[j] )) == NULL){  /* Записываем символы в новый файл */
            puts("The file is not written!");
            return 0;
        }
    }
    fclose(file2);
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 19:43

Переписать двумерный массив в одномерный и отсортировать его в порядке убывания (методом выбора)
Разработать программу, что переписывает двумерный массив в одномерный и...

Структуры: "Результаты сессии", отсортировать в порядке убывания рейтинговых баллов
С клавиатуры ввести последовательность записей содержащие данные о результатах...

Отсортировать слова в строках по количеству подряд идущих согласных букв в порядке возрастания
Ввести текст из файла, а также массив символов-разделителей с клавиатуры....


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

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

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