Помогите пожалуйста подправить мой код. Программа, которая считает количество вхождений в текст каждого символа

218
25 июля 2021, 06:30

Нужна программа, которая считает количество вхождений в текст каждого символа.

Вот мой код:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string text = "", symbol = "";
    int count[256] = { 0 };
    int f = 0;
    //считываем текст
    cout << "Input the text:" << endl;
    getline(cin, text); 
    //меняем заглавные буквы на строчные
    transform(text.begin(), text.end(), text.begin(), tolower); 
    //считаем количество вхождений каждого символа
    //(если посчитали, то заменяем на '^')
    for (int i = 0; i < text.length(); i++)
    {
        if (text[i] != '^') 
        {
            symbol += " ";
            symbol[f] = text[i];
            count[f]++;
            text[i] = '^';
            for (int j = i + 1; j < text.length(); j++)
            {
                if (text[j] != '^' && text[j] == symbol[f])
                {
                    text[j] = '^'; 
                    count[f]++;
                }
            }
            f++;
        }
    }
    //выводим символ и его количество вхождений в текст
    cout << endl;
    for (int i = 0; i < symbol.length(); i++) cout << symbol[i] << "\t";
    cout << endl;
    for (int i = 0; i < symbol.length(); i++) cout << count[i] << "\t";
    cout << endl;
    system("pause");
    return 0;
}

1) Почему-то заглавные буквы не меняются на строчные.

2) Не знаю, как упорядочить при выводе символы по количеству их вхождений (по убыванию).

Answer 1

Функция tolower не будет работать с русскими буквами. Наверное, должна, но я не слышал, чтоб где работала.

А у вас я бы собирал массив с символами сразу, а потом сортировал (вот проверка, что код работает):

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string text = "", symbol = "";
    struct data {
        char c;
        int  count;
    } count[256];
    for(int i = 0; i < 256; i++) {
        count[i].c = i;
        count[i].count = 0;
    }
    //считываем текст
    cout << "Input the text:" << endl;
    getline(cin, text); 
    //меняем заглавные буквы на строчные
    transform(text.begin(), text.end(), text.begin(), tolower);
    //считаем количество вхождений каждого символа
    //(если посчитали, то заменяем на '^')
    for (int i = 0; i < text.length(); i++)
    {
        count[text[i]].count++;
    }
    sort(count,count+256,[](const data& d1, const data& d2){ return d1.count > d2.count; });
    //выводим символ и его количество вхождений в текст
    for (int i = 0; i < 256; i++)
        if (count[i].count)
            cout << count[i].c << " : " << count[i].count<< endl;
    system("pause");
    return 0;
}
READ ALSO
яндекс касса и jquery

яндекс касса и jquery

Всем привет, никак не могу разобраться, как написать post-запрос к яндекс кассеСам запрос, который ниже проверял, все работает

144
Размещение 3D файлов на форуме

Размещение 3D файлов на форуме

Подскажите,пожалуйста, какой нужен код, для размещения файлов форматовglb,

135
Удалить часть строки из списка

Удалить часть строки из списка

Получаю Excel файл из сторонней программыЧитаю Excel, получаю список из ячеек

377