Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
S_O_A_D
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 48
#1

Посчитать сколько раз встречается каждая буква в тексте - C++

11.06.2013, 21:38. Просмотров 2617. Ответов 6
Метки нет (Все метки)

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

Помогите реализовать, что-то голова вовсе не варит)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 21:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитать сколько раз встречается каждая буква в тексте (C++):

Посчитать сколько раз встречается каждая буква(русский ввод) - C++
В общем написал исходник , работает не правильно. Подскажите где ошибка. #include <iostream.h> #include <string.h> int main() {...

Посчитать, сколько раз встречается каждая буква в двух текстах - C++
мне нужно посчитать сколько раз встречается каждая буква в двух текстах. но почему-то в первом он считает правильно, а во втором тоже...

Сколько раз каждая буква из алфавита встречается в последовательности - C++
Задачу я получается решил,только теперь не знаю как вывести сколько раз используется каждая буква латинского алфавита.Нужно добавить его не...

Определить сколько раз в тексте встречается буква А и сколько раз буква С - C++
:wall:Определить сколько раз в тексте встречается буква А и сколько раз буква С

Массивы. Определить, сколько раз каждая буква латинского алфавита встречается в строке - C++
Помогите пожалуйста. Дана строка длиной не более 80 символов, оканчивающаяся точкой. Определить, сколько раз каждая буква латинского...

Подсчитать сколько раз встречается каждая буква с учетом всех прописных и строчных букв - C++
нужно чтобы программа определила в тексте какие из символов "а", "о", "у", "ю", "я", "е" встречаются чаще всего,затем подсчитать общее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
11.06.2013, 22:14 #2
С помощью STL можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <unordered_map>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string text = "jgjksdghkjsdhgkjadgbasguebueyrgbfyuyfdsvyatfs";
    unordered_map<char, int> chars;
 
    for (auto c : text) ++chars[c];
 
    auto comp = [&chars](char c1, char c2)
        { return chars[c1] > chars[c2]; };
 
    sort( begin(text), end(text), comp );
 
    cout << text;
    return 0;
}
http://ideone.com/odK1Wg
Особого отличия для массива символов не будет.
S_O_A_D
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 48
11.06.2013, 22:21  [ТС] #3
А можно как-то проще? Просто у меня VS2010 и половину функций просто не работает..
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
11.06.2013, 22:40 #4
вот так должно заработать в старом С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
 
using namespace std;
 
map<char, int> chars;
 
bool comp(char c1, char c2)
{ return chars[c1] > chars[c2]; };
 
int main()
{
    string text = "jgjksdghkjsdhgkjadgbasguebueyrgbfyuyfdsvyatfs";
        for (int i = 0; i != text.size(); ++i)
                ++chars[ text[i] ];
 
        sort( text.begin(), text.end(), comp );
 
        cout << text;
    return 0;
}
S_O_A_D
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 48
11.06.2013, 22:44  [ТС] #5
Спасибо! Теперь все заработало) У меня еще есть пару вопросов: не раз встречал вот такой код:"++chars[ text[i] ];" что означает в данном случае этот инкремент? И можно еще короткий алгоритм к вашей программе?)
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
11.06.2013, 22:58 #6
chars - это map, соответственно интовое значение с ключом text[i] инкрементируется

Добавлено через 9 минут
имеется, значит map -a способная хрнить элементы только с уникальным ключом, проходим по строке и подсчитываем количество вхождений каждой буквы в стрроке - сии результаты заносятся в map в виде пары "буква" - "количество вхождений ", затем сортируем строку по критерию количества вхождений в строку
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
11.06.2013, 22:59 #7
1)Последовательно проходим по строке и считаем сколько раз встречается каждый символ. Сохраняем данные в ассоциативном контейнере (ключ (символ) - данные (сколько раз встречается))
2)Сортируем символы в строке в зависимости от того как часто они встречаются (для этого то и писалась функция comp)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2013, 22:59
Привет! Вот еще темы с ответами:

Посчитать, сколько раз встречается каждая цифра в введенном с клавиатуры числе - C++
Посчитать, сколько раз встречается каждая цифра в введенном с клавиатуры числе.

Определить сколько раз в тексте встречается заданная буква - C++
а) сколько раз в тексте встречается буква, которая вводится с клавиатуры

Рекурсия: посчитать, сколько раз встречается заданная буква в массиве - C++
Создайте рекурсивную функцию, которая будет принимать вот такие аргументы: слово чаровый массив, одну букву, и длину этого массива....

Определить сколько раз в тексте встречается буква, вводимая с клавиатуры - C++
Определить сколько раз в тексте встречается буква, вводимая с клавиатуры


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.06.2013, 22:59
Ответ Создать тему
Опции темы

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