С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 17.10.2014
Сообщений: 153

Алфавитно-частотный словарь на основе односвязного списка с применением токенов

28.12.2014, 11:18. Показов 6166. Ответов 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
#include <iostream>
#include <fstream>
#include <locale> 
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"rus");
 
    ifstream in("text.txt"); //Файл от куда будет браться текст
 
    const char separator[]=" \.,";
    char S[]="Строка, которая будет разбита на отдельные слова ";
    char *Ptr=NULL;
    char *temp=new char[strlen(S)+1]; //выделили память для создания резервной копии строки
 
    strcpy(temp,S);//Скопировали строку в резервную копию
 
 
    Ptr=strtok(S,separator); //Исходная строка будет изменена
    while (Ptr)
    {
       cout<<Ptr<<"\n"; //выводим слово из строки на экран
       Ptr=strtok(0,separator); //указываем на новый токен
    }
 
    strcpy(S,temp); //Восстанавливаем строку из резервной копии
    cout<<S << endl;
    delete []temp; //Так как выделяли память, не забываем ее чистить
 
    system("pause");
    
}
Я так понимаю, что для более быстрой работы программы мне нужно с файлом работать напрямую, т.е. сначала всё свести к одному регистру, затем поставить NULL в соотв.поля( ,.\),а потом с помощью токенов переходить от слову к слову и с каждым словом работать, т.е. проверять слово, которое нах-ся в файле text на его наличее в файле другом, в котором осуществяляется алфавитно-частостный словарь. Т.е. если слова нет, то добавляем его, и частоту ставим =1, если это слово уже записано в словаре, то увеличиваем его частоту на единицу.

Вопрос: Как это всё сделать???
В данный момент я даже не могу понять как работать с текстовым файлом не выгружая его в массив... Или полюбому выгружать придётся? А если у меня там текст на несколько гигов?..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2014, 11:18
Ответы с готовыми решениями:

Алфавитно-частотный словарь
Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в котором в столбик записаны слова, состоящие только...

Алфавитно-частотный словарь
Здравствуйте,помогите пожалуйста написать программу. Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в...

Алфавитно-частотный словарь
Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в котором в столбик записаны слова, состоящие только...

2
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.12.2014, 11:40
как работать с текстовым файлом
  • Начинаете с задания класса символов "буква". "Слова" - это последовательности "букв", разделенные "небуквами". Что есть "буква" и что "небуква" зависит от языка, кодировки и орфографии (ex: мiр, об"ект, on-line, О'Генри).
  • Читаете из файла "слова" по одному и заносите в словарь. Если слово уже есть в словаре, увеличиваете счетчик.
  • Выдаете отсортированный список слов (по частоте, либо по алфавиту).

WordLister
0
5 / 5 / 6
Регистрация: 15.10.2014
Сообщений: 18
28.12.2014, 23:21
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <map>
#include <string>
#include <algorithm>    // ptr_fun
#include <cctype>       // transform, isalnum
using namespace std;
 
// для упрощения читаемости кода новый тип данных - словарь
// Словарь хранит данные в виде "слово/значение"
typedef map<string, int> freq_dic;
 
// Парсинг текста
void parse_text(istream&, freq_dic&);
 
int main()
{
    try
    {
        // Открыть файл
        ifstream  in_file("test.txt");
        if(!in_file) throw; 
        
        // Частотный словарь
        freq_dic dic;
        
        // Парсинг текста
        parse_text(in_file, dic);
        
        // Вывод содержимого словаря на экран
        cout << "WORD"  << '\t' << "FREQUENCY" << endl;
        for(freq_dic::iterator it = dic.begin(); it != dic.end();  ++it)
            cout << it->first << '\t' << it->second << endl;
    }   
    catch(...)
    {
        cout << "Error open file" << endl;
    } 
    return 0;
}
 
// Парсинг текста
void parse_text(istream &in, freq_dic &dic)
{
    string s;
    // оператор >> читает из левого операнда отрезки, не содержащие пробелов (слова)
    while(in >> s) 
    {
        // в верхний регистр
        transform(s.begin(), s.end(), s.begin(), ptr_fun<int, int>(toupper));
        // удаление не букво-цифровых символов с конца строки
        // while для случаев типа ",-"
        while (!isalnum(s[s.length() - 1])) s.erase(s.length() - 1, s.length());
        // запись в словарь слова
        // map определяет оператор [], позволяющий получить значение данного ключа
        // если ключ в словаре не существует, данный оператор его добавить со значением по умолчанию (0)
        // а оператор ++ его инкрементирует, т.е. будет записано 1
        ++dic[s];
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2014, 23:21
Помогаю со студенческими работами здесь

Построить алфавитно-частотный словарь
Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в котором записаны слова, состоящие из букв латинского...

Алфавитно-частотный словарь - исправить ошибки в коде
Столкнулся с проблемой, взял код из учебника, а он в упрямую не работает, я и понять не могу в чем дело(. Объясните, пожалуйста. ...

Алфавитно-частотный словарь: новый элемент добавить в голову
алфавитно-частотный словарь. задание:новый элемент добавить в голову. помогите пожалуйста составить программу:)очень срочно нужно к...

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

Напишите программу, которая строит алфавитно-частотный словарь для файла
Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в котором в столбик записаны слова, состоящие только...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru