Top.Mail.Ru
Ответы

Cамая частая буква C++

Дана строка, возможно содержащая пробелы. Определите, какая буква латинского алфавита (или какие буквы) в этой строке встречается чаще всего. При решении этой задачи прописные и строчные буквы считаются одинаковыми, а прочие символы, не являющиеся буквами, не учитываются.

При решении этой задачи нельзя пользоваться вложенными циклами. Входная строка должна обрабатываться за один проход.

Входные данные

Дана непустая строка.

Выходные данные

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

Например
Ввод
- We all live in the Yellow Submarine!
Вывод
EL
5

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
123456789101112131415161718
 #include <algorithm> 
#include <cctype> 
#include <iostream> 
#include <set> 
#include <string> 
using namespace std; 
int main() { 
    constexpr size_t n = 128; 
    int acc[n]{}; 
    string line; 
    getline(cin, line); 
    for (auto ch : line) if (ch > 0 && isalpha(ch)) ++acc[toupper(ch)]; 
    auto max = *max_element(begin(acc), end(acc)); 
    set<char> box; 
    for (auto i = 0; i < n; ++i) if (max == acc[i]) box.insert(char(i));
    for (auto ch : box) cout << ch; 
    cout << '\n' << max << '\n'; 
} 
12345678910111213141516171819202122232425
 #include <cctype> 
#include <iostream> 
#include <map> 
using namespace std; 
int main() { 
    map<char, int> box; 
    char ch; 
    auto max = 0; 
    while (true) { 
        ch = cin.get(); 
        if (ch == '\n') break; 
        if (ch > 0 && isalpha(ch)) { 
            ++box[toupper(ch)]; 
            if (box[toupper(ch)] > max) { 
                max = box[toupper(ch)]; 
            } 
        } 
    } 
    for (const auto& [key, value] : box) {
        if (value == max) { 
            cout << key; 
        } 
    } 
    cout << '\n' << max << '\n'; 
} 
Аватар пользователя
Мудрец

Эту элементарную задачу можно решить несколькими путями. В частности, можно использовать std::map<char,unsigned int> или же запилить массив из 26 элементов и использовать эти структуры данных для накопления информации о количестве каждой буквы в строке. Затем формируем массив структур вида

12345
 struct Item
{
    char ch;
    unsigned int count;
}; 

И заполняем его накопленными данными. после чего массив сортируется по полю count и производится вывод данных

Аватар пользователя
Ученик

/

Аватар пользователя
Мастер

чо так сложна