Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
OlgaOlgaa
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 46
#1

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

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

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

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

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

Примеры
входные данные
i
was
he
was
she
he
выходные данные
he 2
was 2
i 1
she 1

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2017, 16:12
Ответы с готовыми решениями:

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

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

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

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

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

6
MrGluck
Модератор
Эксперт CЭксперт С++
8051 / 4895 / 1426
Регистрация: 29.11.2010
Сообщений: 13,284
27.10.2017, 16:40 #2
OlgaOlgaa, так что из этого оставить
Построить алфавитно-частотный словарь или эту тему?
Сколько слов в одной строке?
0
OlgaOlgaa
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 46
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
nmcf
6259 / 5571 / 2531
Регистрация: 14.04.2014
Сообщений: 23,450
28.12.2017, 16:02 #4
C++
1
while ( Fin >> s ) L[s]++;
Затем переносишь в vector и сортируешь.
0
OlgaOlgaa
0 / 0 / 2
Регистрация: 07.01.2017
Сообщений: 46
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
nmcf
6259 / 5571 / 2531
Регистрация: 14.04.2014
Сообщений: 23,450
28.12.2017, 18:03 #6
Я же сказал убрать лишнее. Что там за p? После моего цикла сразу вывод делай. Увидишь результат только без сортировки.
0
Fixer_84
835 / 645 / 646
Регистрация: 30.04.2016
Сообщений: 2,161
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2017, 17:39

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru