c++ Частота символов

Задание:Нужно посчитать, сколько раз каждый символ встречается в заданном тексте, и отсортировать по убыванию частоты. Результаты выдает верно,но з ошибкою.В чем проблема?

int main() {
    std::string string_text = "Hello world!!";
    int size_string_text = string_text.length();
    char container_sign_array_string[13] = {0};
    int array_number_count_string_text[9];
    char sort_sign_array_string[9] = { 0 };

    std::cout << string_text << std::endl;

    for (int i = 0;i < size_string_text;i++) {
        container_sign_array_string[i] = string_text[i];
    }

    int index_sign_array_string_left_operand = 0, index_sign_array_string_right_operand = 0, index_sort_sing_string_text = 0;
    int counter_number_sing_string_text = 0;
    bool boolean_while_sort_char = true;

    sort_sign_array_string[index_sort_sing_string_text] = container_sign_array_string[0];
    int start_counter_number_sing_string_text = 1;

    while (boolean_while_sort_char) {
        if (size_string_text == index_sign_array_string_right_operand) {
            int i = 0;
            index_sign_array_string_left_operand++;

            while (size_string_text > i) {
                if (sort_sign_array_string[i] != 0) {
                    if (container_sign_array_string[index_sign_array_string_left_operand] == sort_sign_array_string[i]) {
                        start_counter_number_sing_string_text = 0;
                        break;
                    }
                }
                i++;
            }
            if (i == size_string_text) {
                start_counter_number_sing_string_text = 1;
                index_sort_sing_string_text++;
                sort_sign_array_string[index_sort_sing_string_text] = container_sign_array_string[index_sign_array_string_left_operand];
            }
            counter_number_sing_string_text = 0;
            index_sign_array_string_right_operand = 0;
        }
        if (start_counter_number_sing_string_text == 1 && container_sign_array_string[index_sign_array_string_left_operand] == container_sign_array_string[index_sign_array_string_right_operand]) {
            counter_number_sing_string_text++;
            array_number_count_string_text[index_sort_sing_string_text] = counter_number_sing_string_text;
        }

        index_sign_array_string_right_operand++;

        if (index_sign_array_string_left_operand == size_string_text) {         
            boolean_while_sort_char = false;
        }
    }

    int max_string_text = 0;
    char* sing_descending_string_text = new char[index_sort_sing_string_text];
    int* descending_number_string_text = new int[index_sort_sing_string_text];
    int* array_number_count_string_text = new int[index_sort_sing_string_text];
    descending_number_string_text[0] = 0;
    sing_descending_string_text[0] = { 0 };
    
    boolean_while_sort_char = true;

    int index_sort_descending_number_string_text = 0;

    for (int i = 0;i < index_sort_sing_string_text;i++) {
        array_number_count_string_text[i] = array_number_count_string_text[i];
    }

    while (boolean_while_sort_char)
    {
        for (int i = 0;i < index_sort_sing_string_text;i++) {
            if (array_number_count_string_text[i] >= max_string_text) {
                max_string_text = array_number_count_string_text[i];
            }
        }

        descending_number_string_text[index_sort_descending_number_string_text] = max_string_text;

        for (int i = 0;i < index_sort_sing_string_text;i++) {
            if (array_number_count_string_text[i] == max_string_text) {
                array_number_count_string_text[i] = 0;
                break;
            }
        }

        max_string_text = 0;
        index_sort_descending_number_string_text++;

        if (index_sort_descending_number_string_text == index_sort_sing_string_text) {
            boolean_while_sort_char = false;
        }
    }

    boolean_while_sort_char = true;
    int index_sort_descending_sing_string_text = 0;
    index_sign_array_string_left_operand = 0;
    index_sign_array_string_right_operand = 0;

    while (boolean_while_sort_char) {
        if (index_sign_array_string_right_operand == index_sort_sing_string_text) {
            index_sign_array_string_right_operand = 0;
            index_sign_array_string_left_operand++;
        }
        if (descending_number_string_text[index_sign_array_string_left_operand] == array_number_count_string_text[index_sign_array_string_right_operand]) {
            sing_descending_string_text[index_sort_descending_sing_string_text] = sort_sign_array_string[index_sign_array_string_right_operand];
            index_sort_descending_sing_string_text++;
        }
        index_sign_array_string_right_operand++;
        if (index_sign_array_string_left_operand == index_sort_sing_string_text) {
            for (int i = 0;i < index_sort_sing_string_text;i++) {
                std::cout << sing_descending_string_text[i] << " " << descending_number_string_text[i] << std::endl;
            }
            std::cout << "Sadas";
            boolean_while_sort_char = false;
        }
    }
    delete[] descending_number_string_text, sing_descending_string_text, array_number_count_string_text;
    return 0;
}


Ответы (1 шт):

Автор решения: Harry

Вот так не сойдет?

using namespace std;

int main(int argc, char * argv[])
{
    string text = "Hello world!!";


    pair<int,char> v[256];
    for(int i = 0; i < 256; ++i) v[i].second = i;
    for(auto c: text) v[(unsigned char)c].first++;
    sort(v,v+256,greater<>());
    for(auto[n,c]:v) if (n == 0) break; else cout << c << ": " << n << endl;
}

Ваш код вообще не компилируется, из-за наличия одновременно

int  array_number_count_string_text[9];

и

int* array_number_count_string_text = new int[index_sort_sing_string_text];
→ Ссылка