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];