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

Рейтинг слов в текстовом файле, редактирование кода

04.04.2013, 17:21. Показов 853. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с задачей, вожусь с ней уже 2 неделю, но сдвигов нет.
суть задачи в том, что есть текстовый файл, заполненный какими то словами, надо вывести на экран топ 10 самых частовстречаемых слов
вот то, что мне удалось сделать самому
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
#include <stdio.h>
#include <stdlib.h>
#include <string>
struct word{
    char a[30];
    int freq;
    word *ptr;
}first,tail; 
void main(){
    char buffer[30]={0};
    bool found=false, finish=false;
    word *act=&first, *mem=&first, *tmp;
    int c=0,d=0,max=0,premax=0;
    FILE *f1;
    f1=fopen("Text.txt","r");
    first.ptr=&tail;
    first.freq=1;
    fscanf(f1,"%s ",first.a);
    while(!feof(f1)){
        
        found=false;
        finish=false;
        act = &first;
        fscanf(f1,"%s ", buffer);
        while(act!=&tail){
            d++;
                if( strcmp(act->a,buffer)>0 ){
                printf("d=%d Word=%s %s\n",d,mem,buffer);
                found = false;
                break;
            } else if( strcmp(act->a,buffer)==0 ){
                printf(" found!\n");
                found = true;
                act->freq++;
                if(act->freq>max)
                    max=act->freq;
                break;
            }
            mem=act;
            act=act->ptr;
        }
        if(!found){
            //printf("\n");
            tmp = (word *)malloc(sizeof(word));
            sprintf(tmp->a,"%s",buffer);
            tmp->freq=1;
            mem->ptr=tmp;
            tmp->ptr=act;
            c++;
            printf("\nmem=%s act=%s \n ",mem,act->a);
        }
    }
    printf("words=%d\n",c);
    c=0;
    while(c<12){
        
        act=&first;
        while(act!=&tail){
        
            if(act->freq>premax && act->freq<max){
                premax=act->freq;
                printf("\npremax=%d max=%d",premax,max);
            }
            if(act->freq == max )
                printf("%s freq=%d c=%d\n",act->a,act->freq,++c);
            act=act->ptr;
        }
        max=premax;
        premax=0;
    }
    printf("\npremax=%d",premax);
    fclose(f1);
    printf("\nd=%d",d);
    getchar();
    getchar();
}
Добавлено через 26 минут
у нас вроде свободная страна)

Добавлено через 1 час 31 минуту
/summon help
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2013, 17:21
Ответы с готовыми решениями:

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

Редактирование строки в текстовом файле
Здравствуйте. Есть текстовый файл, который формируется данными из textbox. Каким образом можно...

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не...

Исполнение кода, написанного в текстовом файле (динамическая компиляция кода)
к примеру есть у меня форма а на ней кнопка, можно ли присваивать код кнопке с текстового файла? ...

3
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
04.04.2013, 20:19 2
Работает только для латинских символов. Для поддержки отечественного алфавита нужно дописывать.
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
 
struct Node
{
   const char* pstr;
   size_t length;
   size_t count;
   struct Node* next;
};
 
//-----------------------------------------------------------------------------
struct Node* findNode(struct Node* list, const char* pstr, size_t length)
{
   for (; list && ((list->length != length) ||
                   strncmp(list->pstr, pstr, length)); list = list->next) { ; }
 
   return list;
}
//-----------------------------------------------------------------------------
struct Node* pushWithCount(struct Node** list, const char* pstr, size_t length)
{
   struct Node* node = findNode(*list, pstr, length);
 
   if (node == NULL)
   {
      node = (struct Node*) malloc(sizeof(struct Node));
      node->pstr = pstr;
      node->length = length;
      node->count = 1;
      node->next = *list;
      *list = node;
   }
   else
   {
      node->count++;
   }
 
   return *list;
}
//-----------------------------------------------------------------------------
struct Node* pushWithSort(struct Node** list, struct Node value)
{
   struct Node* head = (struct Node*) malloc(sizeof(struct Node));
   head->next = *list;
 
   struct Node* node = head;
 
   for (; node->next && (node->next->count > value.count); node = node->next) { ; }
 
   struct Node* newnode = (struct Node*) malloc(sizeof(struct Node));
   *newnode = value;
   newnode->next = node->next;
   node->next = newnode;
 
   *list = head->next;
 
   free(head);
 
   return *list;
}
//-----------------------------------------------------------------------------
struct Node pop(struct Node** list)
{
   struct Node value = {NULL, 0, 0, NULL};
 
   if (*list)
   {
      struct Node* node = *list;
      *list = (*list)->next;
      value = *node;
      value.next = NULL;
      free(node);
   }
 
   return value;
}
//-----------------------------------------------------------------------------
void clear(struct Node** list)
{
   struct Node* node;
 
   while (*list)
   {
      node = *list;
      *list = (*list)->next;
      free(node);
   }
}
//-----------------------------------------------------------------------------
struct Node* sort(struct Node** list)
{
   struct Node* listSorted = NULL;
 
   while (*list)
   {
      pushWithSort(&listSorted, pop(list));
   }
 
   *list = listSorted;
 
   return NULL;
}
//-----------------------------------------------------------------------------
int getWord(const char* text, const char** begin, const char** end)
{
   for (; *text && !isalpha(*text); ++text) { ; }
 
   *begin = text;
 
   for (; *text && isalpha(*text); ++text) { ; }
 
   *end = text;
 
   return (*begin < *end);
}
//-----------------------------------------------------------------------------
char* getText(FILE* f)
{
   fseek(f, 0, SEEK_END);
   fpos_t length;
   fgetpos(f, &length);
   fseek(f, 0, SEEK_SET);
 
   char* text = (char*) malloc(sizeof(char) * (length + 1));
   text[length] = 0;
 
   fread(text, length, 1, f);
 
   return text;
}
//-----------------------------------------------------------------------------
struct Node* getListFromText(const char* text)
{
   struct Node* list = NULL;
 
   const char* begin;
   const char* end;
 
   while (getWord(text, &begin, &end))
   {
      pushWithCount(&list, begin, end - begin);
      text = end + 1;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void print(struct Node* list, size_t count)
{
   if (count == 0)
   {
      count--;
   }
 
   for (; list && (count > 0); list = list->next, --count)
   {
      printf("%2d %.*s\n", list->count, list->length, list->pstr);
   }
}
//-----------------------------------------------------------------------------
 
int main(int argc, const char* argv[])
{
   if (argc != 2)
   {
      fprintf(stderr, "Usage: program <FILE.txt>\n");
      system("pause");
      return EXIT_FAILURE;
   }
 
   FILE* f = fopen(argv[1], "rb");
   if (f == NULL)
   {
      perror(argv[1]);
      return EXIT_FAILURE;
   }
   char* text = getText(f);
   fclose(f);
 
   struct Node* list = getListFromText(text);
   sort(&list);
 
   print(list, 10);
 
   clear(&list);
   free(text);
 
   system("pause");
 
   return EXIT_SUCCESS;
}
Рейтинг слов в текстовом файле, редактирование кода


Вызов через командную строку или просто перетащите (в explorer) файл с текстом на исполняемый.

Бианрник + исходник: program.7z
0
3 / 3 / 1
Регистрация: 30.01.2013
Сообщений: 73
04.04.2013, 21:29  [ТС] 3
я разобрался, но я не понимаю как вы это сделали, как превратили код в это...наверное я идиот
0
easybudda
12.04.2013, 15:17     Рейтинг слов в текстовом файле, редактирование кода
  #4
 Комментарий модератора 
Immi, дублирование тем запрещено правилами форума. Не делайте так больше.
продолжение
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2013, 15:17

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

Подсчет слов в текстовом файле
кaк пoдсчитaт скoлкo нaпример: слoв 'windows' встречaются в теxтoвoм фaиле пoд нaзвaнием 'data.тxт '

Поиск слов в текстовом файле
Всем привет! Вопрос следующий: есть текстовый файл большого размера (до 400Мб), необходимо каждые...

Поиск слов в текстовом файле
Всем привет. Помогите пожалуйста, нужно сделать программу-словарь. То есть я ввожу, например, слово...

Подсчет слов в текстовом файле
Добрый день! Пожалуйста помогите. Нужно создать батник, который будет получать в качестве...

Количество слов в текстовом файле
Здравствуйте. Допустим у меня есть текстовый файл, в котором нужно посчитать количество слов, как...


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

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