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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 22:45   #1
Taina
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию Частотный словарь текста (Си)

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

Моя программа вот:
Код:
#include<stdio.h>
#include<string.h>
struct word
{
	char*w;
	int f;
	word*next;
	word*prev;
};
void prB(word*beg,word*end)//печать списка с начала
{
	word*p=beg->next;
	while(p!=end)
	{
		printf("%s -- %d\n", p->w, p->f);
		p=p->next;
	}
}
word*form(char*s)//создание элемента списка
{
	word*W=new word;
	W->w=s;
	W->f=1;
	W->prev=NULL;
	W->next=NULL;
	return W;
}
void form2(FILE*f,word*beg,word*end)//создание списка
{
	char t[4095];
	fscanf(f,"%s",&t);
	word*NW1=form(t);
	NW1->prev=beg;
	NW1->next=end;
	beg->next=NW1;
	end->prev=NW1;
	while(fscanf(f,"%s",&t)!=EOF)
	{
		int k=0;
		int j=0;
		for(word*i=beg->next;i!=end;i=i->next)
		{
			if(strcmp(t,i->w)==0)
			{
				(i->f)++;
				k++;
				break;
			}
		}
		if(k!=0) continue;
		word*NW=form(t);
		NW->next=end;
		NW->prev=end->prev;
		NW->prev->next=NW;
		end->prev=NW;
	}
}
void main()
{
	word*beg=new word;
	word*end=new word;
	beg->w=0;
	beg->f=0;
	end->w=0;
	end->f=0;
	beg->prev=end->next=0;
	beg->next=end;
	end->prev=beg;
	FILE*f=fopen("file.txt","r");
	form2(f,beg,end);
	fclose(f);
	prB(beg,end);
}
Но она (конечно же, иначе что бы я тут делала) не работает. Вероятно, ошибка где-то в циклах в функции создания списка. Но глаз замылился, ничего не вижу. Буду благодарна за помощь.

Последний раз редактировалось Stilet; 20.06.2012 в 07:36.
Taina вне форума Ответить с цитированием
Старый 19.06.2012, 23:57   #2
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

А что такое "частотный словарь", будьте добры пояснить.
rlib вне форума Ответить с цитированием
Старый 20.06.2012, 00:07   #3
Taina
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от rlib Посмотреть сообщение
А что такое "частотный словарь", будьте добры пояснить.
словарь, в котором слова выводятся не по алфавиту, а по количеству раз, которое они встречаются в тексте.
Taina вне форума Ответить с цитированием
Старый 20.06.2012, 00:13   #4
Taina
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию

ну то есть, по моей задумке вот что должно в программе происходить:
считываем первое слово, добавляем в список
в цикле while считываем следующие слова, каждое сверяем слово с имеющимися (цикл for). если находим совпадение, +1 к частоте слова, с которым совпало (и по идее проверяем, не стала ли частота больше, чем у предыдущего элемента. если стала - меняем их местами. но этого я еще не делала). если не находим совпадения - добавляем слово в конец списка с частотой 1.
Taina вне форума Ответить с цитированием
Старый 20.06.2012, 00:32   #5
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

А вам обязательно двунаправленный список?
В книжке Кернигана и Ричи в главе 6.5 Self-referential Structures готовое решение с деревом. Можно просто сдуть.
rlib вне форума Ответить с цитированием
Старый 20.06.2012, 00:37   #6
Taina
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от rlib Посмотреть сообщение
А вам обязательно двунаправленный список?
обязательно. да вроде и не очень сложно это должно быть... просто затык какой-то.
Taina вне форума Ответить с цитированием
Старый 20.06.2012, 11:55   #7
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ты читаешь все слова в один буфер. Потому и не работает.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Частотный словарь приставок Elegance1 Помощь студентам 0 11.05.2012 16:22
Частотный словарь. dixonich Общие вопросы по Java, Java SE, Kotlin 5 19.09.2011 23:31
Java. Частотный словарь. dixonich Помощь студентам 1 17.09.2011 07:39
частотный словарь с# OLGUNYA C# (си шарп) 5 23.05.2011 14:50
частотный словарь в sagitron Microsoft Office Excel 11 07.01.2010 20:55