Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/75: Рейтинг темы: голосов - 75, средняя оценка - 4.99
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 47
1

Алфавитно-частотный словарь

27.10.2017, 16:12. Показов 14717. Ответов 6
Метки нет (Все метки)

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

Входные данные
Входной файл содержит неизвестное количество строк, в каждой из которых записано слово, состоящее только из строчных букв латинского алфавита. Последняя строка файла – пустая.

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

Примеры
входные данные
i
was
he
was
she
he
выходные данные
he 2
was 2
i 1
she 1
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2017, 16:12
Ответы с готовыми решениями:

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

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

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

Частотный словарь.
здравствуйте помогите плиз решить последнюю задачу для зачета.вот условие: дан текст.получить...

6
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.10.2017, 16:40 2
OlgaOlgaa, так что из этого оставить
Построить алфавитно-частотный словарь или эту тему?
Сколько слов в одной строке?
0
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 47
28.12.2017, 15:20  [ТС] 3
Помогите пожалуйста переписать программу
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
#include <iostream>
#include <map>
#include <fstream>
 
using namespace std;
 
map <string,int> L;
map <string,int>::iterator it;
 
int main()
{
    ifstream Fin ("input.txt");
    ofstream Fout ("output.txt");
    string s;
    int p = L.count ( s );
    while ( Fin >> s )
    {int p;
    p = L.count ( s );
    if ( p == 1 )
    L[s] ++;
    else
    L.insert ( pair <string,int> (s, 1) );
    }
    for ( it = L.begin(); it !=  L.end(); it++ )
    Fout << it->first << " "<< it->second << endl;
    return 0;
}
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
28.12.2017, 16:02 4
C++
1
while ( Fin >> s ) L[s]++;
Затем переносишь в vector и сортируешь.
0
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 47
28.12.2017, 16:34  [ТС] 5
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
#include <iostream>
#include <map>
#include <fstream>
 
using namespace std;
 
map <string,int> L;
map <string,int>::iterator it;
 
int main()
{
ifstream Fin ("input.txt");
ofstream Fout ("output.txt");
string s;
int p = L.count ( s );
while ( Fin >> s ) L[s]++;
{int p;
p = L.count ( s );
if ( p == 1 )
L[s] ++;
else
L.insert ( pair <string,int> (s, 1) );
}
for ( it = L.begin(); it != L.end(); it++ )
Fout << it->first << " "<< it->second << endl;
return 0;
}

Так программа вообще не работает

Добавлено через 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
#include <iostream>
#include <map>
#include <fstream>
 
using namespace std;
 
map <string,int> L;
map <string,int>::iterator it;
 
int main()
{
ifstream Fin ("input.txt");
ofstream Fout ("output.txt");
string s;
int p = L.count ( s );
while ( Fin >> s ) L[s]++;
{int p;
p = L.count ( s );
if ( p == 1 )
L[s] ++;
else
L.insert ( pair <string,int> (s, 1) );
}
for ( it = L.begin(); it != L.end(); it++ )
Fout << it->first << " "<< it->second << endl;
return 0;
}


Так программа вообще не работает
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
28.12.2017, 18:03 6
Я же сказал убрать лишнее. Что там за p? После моего цикла сразу вывод делай. Увидишь результат только без сортировки.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
29.12.2017, 17:39 7
OlgaOlgaa, здравствуйте! Я решил эту задачу так:

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
#include <bits/stdc++.h>
 
const int M = 1000;
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    int n, x, l, k;
    string s, arr[M];
    struct Words
    {
        string word;
        int len;
    } dic[M];
    n = 0;
    while (getline(fin, s))
    {
        arr[n++] = s;
    }
    sort(arr, arr + n);
    x = l = k = 0;
    for (int i = l; i < n; i++)
    {
        if (arr[i+1] == arr[i])
        {
            x++;
        }
        else
        {
            l = x;
            l++;
            dic[k].len = l;
            dic[k].word = arr[i];
            k++;
            x = 0;
        }
    }
    sort(dic, dic + k, [](Words const& lhs, Words const& rhs)
        {
            return lhs.len > rhs.len;
        });
    for (int i = 0; i < k; i++)
    {
        cout << dic[i].word << " " << dic[i].len << "\n";
    }
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 18 часов 2 минуты
OlgaOlgaa, вот приблизительно то, что имел ввиду nmcf:

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
#include <bits/stdc++.h>
 
using namespace std;
 
bool sortVec(const pair<string, int>& lhs, const pair<string, int>& rhs)
{
    return lhs.second > rhs.second;
}
 
int main()
{
    ifstream fin("input.txt");
    map<string, int> L;
    vector<pair<string, int>> v;
    string s;
    while (fin >> s)
    {
        L[s]++;
    }
    copy(L.begin(), L.end(), back_inserter<vector<pair<string, int>>>(v));
    sort(v.begin(), v.end(), sortVec);
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i].first << " " << v[i].second << "\n";
    }
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
while ( Fin >> s ) L[s]++;
Затем переносишь в vector и сортируешь.
P.S. Это построено согласно приведенному сообщению.
0
29.12.2017, 17:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2017, 17:39
Помогаю со студенческими работами здесь

Частотный словарь приставок
Помогите пожалуйста, нужно составить частотный словарь приставок, имеющегося текстового файла. Я...

Составить частотный словарь слов
Дано предложение, состоящее из слов, разделенных запятой или пробелами. Составить частотный словарь...

Задача на файлы. Частотный словарь
Очень нужна помощь, уже просто не соображаю. условие: Напишите программу, которая составляет...

Частотный словарь с использованием дерева
Задача: определить понятие слово, прочитать текст и сформировать набор слов данного языка вместе с...


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

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