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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 21:45   #1
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию Словарь с частотою повторений слов

Помогите плиз!!!Нужно написать программу, которая считывает с файла текст и записывает в другой файл : слово и рядом сколько раз оно встречаеться в тексте...Я новичок и не очень понимаю, как это реализировать.Вот что-то сделал, но это несовсем то что нужно

Код:
# include <stdio.h>
#include <stdlib.h>
int main () {
    char S[80];
    char*word[1000][80];
    int i=1;
    FILE*fin, *fout;
    fin=fopen("input.txt","rt");
    fout=fopen("output.txt","wt");
    while(!feof(fin))
    {
                      fscanf(fin,"%s",&S);
                      printf("%iword\n%s\n",i,&S); 
                      word [i][80]=S;
                      fprintf (fout,"%i_%s\n",i,word[i][80]);
                      i++;
    }
  fclose(fin), fclose(fout);
    system ("pause");
    return 0;
}

Последний раз редактировалось Stilet; 15.03.2010 в 09:04.
sabaton вне форума Ответить с цитированием
Старый 15.03.2010, 00:25   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
#include <fstream>
#include <vector>
#include <string>

using namespace std;

struct item
{
	string word;
	int count;
	item(){count = 0;}
	item(string &s,int c)
	{
		word.assign(s.begin(),s.end());
		count = c;
	}
};

int main()
{
	ifstream fin("input.txt");
	ofstream fout("output.txt");
	string s;
	vector <item> bd;
	bool found;
	int i = 0,j;
	while(fin >> s)
	{
		found = false;
		for(i = 0; i < bd.size(); i++)
			if(bd[i].word.compare(s) == 0)
			{
				bd[i].count++;
				found = true;
				break;
			}
		if(!found)
			bd.push_back(item(s,1));
	}
	for(i = 0; i < bd.size(); i++)
		fout << bd[i].word << " : " << bd[i].count << endl;
	return 0;
}
тег [code] не забывай
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 15.03.2010, 19:55   #3
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

Спасибо тебе огромное, но только я не совсем все здесь понимаю
1. #include <vector> для чего она?
2. Что здесь происходит?
Код:
           int count;
	item(){count = 0;}
	item(string &s,int c) // для чего эта функция?
	{
		word.assign(s.begin(),s.end()); // - ?
		count = c;
3. Что такое vector и bool ? как-нить без них можно обойтись в этой программе и сделать по проще?

Можете помочь разобрать???

Последний раз редактировалось Stilet; 18.03.2010 в 12:59.
sabaton вне форума Ответить с цитированием
Старый 17.03.2010, 22:00   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

1.#include <vector> подключает библиотеку для работы с STL массивом(vector)

2. Это конструктор который принимает строку и числовую переменную.

3. bool это тип переменной которая может принимать true или false
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 17.03.2010, 22:21   #5
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
Вопрос

1 .А что такое вектор?
2. функция assign, как она работает? Что обозначают ее параметры begin и end?
3. Что представляет собой условие if(bd[i].word.compare(s) == 0) ?
4. И что это за команда bd.push_back(item(s,1)); ?

Извени, что надоедаю просто я еще такого не учил

Последний раз редактировалось sabaton; 17.03.2010 в 22:39.
sabaton вне форума Ответить с цитированием
Старый 17.03.2010, 23:05   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Можно еще проще с помощью map:

Код:
#include <iostream>
#include <map>
#include <utility>

int main()
{
	ifstream fin("input.txt");
	ofstream fout("output.txt");
	string s;
	map<string, int> bd;
	int i = 0,j;
	while(fin >> s)
	{
	bd.insert(pair<s, 0>);
	(bd[s])++;
	}
	typedef map<string, int>::const_iterator iter;
	for(iter i = bd.begin(); i != bd.end(); i++)
		fout << i -> first << " : " << i -> second << endl;
	return 0;
}
Ну или что-то вроде этого (не проверял).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 17.03.2010, 23:34   #7
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

Если я бы знал что-такое мапы? Та мне бы попорще как-то...Просто используя функции из <string.h> и обычные условия и цыклы...
Ну про векторы я там в принцыпе понял, а функция assign не слишал о такой...Ну и что это за команда bd.push_back(item(s,1)) ?
sabaton вне форума Ответить с цитированием
Старый 18.03.2010, 12:14   #8
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

http://www.cplusplus.com/reference/stl/vector/

Вот тут почитай про вектор и assign
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 28.03.2010, 20:48   #9
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

А как сортировку здесь приделать? Я просто знаю как с масивами, а с вектором не удупляю. Как сделать сортировку?Типа так?
for(int i=0; i<N-1; i++){
for(int j=N-2; j>=i; j--){
if(A[j].bd[0] > A[j+1].bd[0])
{
c=A[j];
A[j]=A[j+1];
A[j+1]=c;
}
if(A[j].bd[0]==A[j+1].bd[0]){
if(A[j].bd[1] > A[j+1].bd[1])
{
c=A[j];
A[j]=A[j+1];
A[j+1]=c;
}
}
}
}
sabaton вне форума Ответить с цитированием
Старый 01.04.2010, 00:30   #10
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
По умолчанию

??????????
sabaton вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Словарь.База слов. Chartvit Общие вопросы C/C++ 0 22.11.2009 12:10
Словарь. База слов. Chartvit Помощь студентам 0 22.11.2009 01:22
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45
Словарь служебных слов языка delphi Kate68 Помощь студентам 1 09.11.2009 22:06
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19