Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 21.12.2018
Сообщений: 3

Создание частотного словаря через стек

21.12.2018, 17:25. Показов 2393. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать частотный словарь использую стеки(не STL). Пока понял только как создать стек. Не могу понять как сделать проверку на повторные слова.
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
#include "pch.h"
#include <iostream>
#include "string"
#include "fstream"
using namespace std;
 
struct slovar           //sozdaev slovar
{
    string word;        //slovo
    int amount;         //kol-vo
    slovar *next;       //sled element
};
 
 
void add(slovar **top, string word)
{
    
    {
        slovar *q = new slovar; // novii element
        q->word = word;         //zapisivaem novoe slovo
        q->amount = 1;          //kol-vo slov 1;
        if (top == NULL)        //esli net vershini(steck pustoi)
            *top = q;           //vershina - novii element
        else                    //esli ne pustoi
        {
            q->next = *top;     //soedenyaem novi element i vershinu
            *top = q;           //vershina - novii element
        }
    }
}
void print(slovar *top)     //  prinimaem ukazatel na vershinu steka
{
    slovar *q = top;        //q - vershina
    while (q)               //poka q ne ravno NULL
    {
        cout << q->word << " " << q->amount << "\n";        //Vivodim slovo i kol-vo
        q = q->next;                                        //sled element
    }
}
 
int main()
{
    slovar *top = NULL;     //zadaem vershinu 
    string s;
    int k = 0;
    fstream text("D:\\Apps\\Slovar Stack\\text.txt");
    fstream text2("D:\\Apps\\Slovar Stack\\text.txt");
    while (text >> s)
    {
        add(&top, s);
    }
    print(top);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2018, 17:25
Ответы с готовыми решениями:

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

Создание частотного словаря
Дан текст, нужно вывести count наиболее часто встречающихся в тексте слов вместе с их частотой. Среди слов, встречающихся одинаково часто,...

Создание частотного словаря
Помогите, пожалуйста, с функцией. Она должна вывести отчёт о самом популярном характере животного в зоопарке. Решила её сделать в виде...

3
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
21.12.2018, 19:38
Olllll, здравствуйте! Я ни разу не встречал такую задачу на стек. Вообще, стек используют, когда нужно что-то помещать в вершину, а затем оттуда забирать. Так с помощью стека, например, можно переворачивать слова. Обычно для частотного анализа используют map, но если вы хотите именно с помощью структур и указателей, то наилучшим вариантом, на мой взгляд, будет использовать бинарное дерево поиска. Вот код, который я не так давно реализовывал (вообщем, это аналог map, но, так сказать, своими руками). Дарю:

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 <string> 
#include <sstream>  
 
    using namespace std;
    
struct node { 
    string data;
    int count;
    node *left;
    node *right;
};
    
node* newNode(string const &data) {
  node* element = new node; 
  element->data = data;
  element->count = 1;
  element->left = NULL; 
  element->right = NULL; 
  return element;
}
 
node* insert(node* element, string const &key) { 
    if (element == NULL) 
        return newNode(key);
    if (key < element->data)
        element->left = insert(element->left, key);
    else if (key > element->data)
        element->right = insert(element->right, key);
    else {
        element->count++;
    }   
    return element;
}
 
void print(node* element) { 
    if (element == NULL)
        return;
    print(element->left);
    cout << element->data << " " << element->count << "\n";
    print(element->right);
}
 
int main() {
    int k;
    string s, word;
    cout << "Enter a string (only spaces between):\n";
    getline(cin, s);
    stringstream str(s);
    k = 0;
    node* root = NULL;
    while (str >> word) {
        k++;
        if (k == 1) root = insert(root, word);
        else insert(root, word);
    }
    cout << "Output of the program:\n";
    print(root);
    system("pause");
    return 0;
}
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
21.12.2018, 20:04
Fixer_84, с помощью двух стеков можно попробовать реализовать сие. Т.е. "переливать" из стека в стек для поиска нужного слова, при нахождении увеличивать счётчик этого слова. Но это полнейшее извращение.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
21.12.2018, 22:04
Nishen, здравствуйте! Спасибо за ваш совет. Если Olllll мой вариант с деревом не устроит, буду пробовать через стек Просто пока не понятно нужно ли использовать именно стек или это просто один из пробных вариантов решения без использования STL.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2018, 22:04
Помогаю со студенческими работами здесь

Поиск самого длинного слова и создание частотного словаря
1) Дан список слов, нужно найти самое длинное слово из этого списка, а из всех самых длинных — лексикографически первое слово. ...

Алгоритм автодополнения из частотного словаря с нуля
Есть словарь в котором каждому слову соответствует число (его частота). Пользователь начинает вводить какое-либо слово и ему предлагается,...

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

Создание словаря
Ребят, не могу словарь сделать....все сотрудники чтобы там,. Фотография, ФИО, переработки

Создание словаря
С помощью интернета создай словарь &quot;страна - население&quot; (как минимум 4 страны) Программа спрашивает у пользователя какую страну...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru