#include <stdio.h>
struct str
{
char sim;
int count;
} ;
struct str freq_tabls[ 256 ] ;
void parse_string( const char * str) //подсчет количества символов
{
int i;
for ( i= 0 ; i< 256 ; ++ i)
{
freq_tabls[ i] .sim = i;
freq_tabls[ i] .count = 0 ;
}
while ( * str)
freq_tabls[ ( unsigned char ) * str++ ] .count ++ ;
}
void bubbleSort( struct str * b, int size )
{
struct str tmp;
int i, j;
for ( i = 0 ; i < size - 1 ; ++ i)
{
for ( j = 0 ; j < size - 1 ; ++ j)
{
if ( b[ j + 1 ] .count > b[ j] .count ) // обрати внимание, что знак д.б. "больше", т.к. тебе надо сортировать по убыванию
{
tmp = b[ j + 1 ] ;
b[ j + 1 ] = b[ j] ; // вот тут копируется как ключ (count), так и символ (sim)
b[ j] = tmp;
}
}
}
}
int main( )
{
char string[ 1024 ] ;
int i;
printf ( "\n \n Введите строчку: \n " ) ;
gets ( string) ;
printf ( "\n Задание 2.\n Отсортировать символы в строке в порядке убывания частоты их встречаемости\n \n " ) ;
parse_string( string ) ;
bubbleSort( freq_tabls, 256 ) ;
for ( i = 0 ; i < 256 ; i++ )
{
if ( freq_tabls[ i ] .count == 0 ) {
break ; // т.к. массив отсортирован, то после первого нуля все остальные д.б. тоже нули
}
printf ( "Cимвол '%c'. Он встречался %d раз\n " , freq_tabls[ i] .sim , freq_tabls[ i] .count ) ;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3Qgc3RyCnsKICAgIGNoYXIgc2ltOwogICAgaW50IGNvdW50Owp9OwpzdHJ1Y3Qgc3RyIGZyZXFfdGFibHNbIDI1NiBdOwp2b2lkIHBhcnNlX3N0cmluZyhjb25zdCBjaGFyKiBzdHIpLy/Qv9C+0LTRgdGH0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgdC40LzQstC+0LvQvtCyCnsKaW50IGk7CiBmb3IoaT0wO2k8MjU2OysraSkKICB7CiAgZnJlcV90YWJsc1tpXS5zaW09aTsKICBmcmVxX3RhYmxzW2ldLmNvdW50PTA7CiAgfQogd2hpbGUoKnN0cikgCiAgZnJlcV90YWJsc1sodW5zaWduZWQgY2hhcikqc3RyKytdLmNvdW50Kys7Cn0Kdm9pZCBidWJibGVTb3J0KCBzdHJ1Y3Qgc3RyICpiLCAgaW50IHNpemUgKQp7CiAgICBzdHJ1Y3Qgc3RyIHRtcDsKICAgIGludCBpLCBqOwogICAgZm9yKGkgPSAwOyBpIDwgc2l6ZSAtIDE7ICsraSkKICAgIHsgICAgICAgICAgICAKICAgICAgICBmb3IoaiA9IDA7IGogPCBzaXplIC0gMTsgKytqKQogICAgICAgIHsgICAgIAogICAgICAgICAgICBpZiAoYltqICsgMV0uY291bnQgPiBiW2pdLmNvdW50KSAgLy8g0L7QsdGA0LDRgtC4INCy0L3QuNC80LDQvdC40LUsINGH0YLQviDQt9C90LDQuiDQtC7QsS4gItCx0L7Qu9GM0YjQtSIsINGCLtC6LiDRgtC10LHQtSDQvdCw0LTQviDRgdC+0YDRgtC40YDQvtCy0LDRgtGMINC/0L4g0YPQsdGL0LLQsNC90LjRjgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0bXAgPSBiW2ogKyAxXTsgCiAgICAgICAgICAgICAgICBiW2ogKyAxXSA9IGJbal07ICAgLy8g0LLQvtGCINGC0YPRgiDQutC+0L/QuNGA0YPQtdGC0YHRjyDQutCw0Log0LrQu9GO0YcgKGNvdW50KSwg0YLQsNC6INC4INGB0LjQvNCy0L7QuyAoc2ltKQogICAgICAgICAgICAgICAgYltqXSA9IHRtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBjaGFyIHN0cmluZ1sxMDI0XTsKICAgIGludCBpOwogICAgcHJpbnRmKCAiXG5cbtCS0LLQtdC00LjRgtC1INGB0YLRgNC+0YfQutGDOiBcbiIgKTsgCiAgICBnZXRzKHN0cmluZyk7CiAgICBwcmludGYoICJcbtCX0LDQtNCw0L3QuNC1IDIuXG4g0J7RgtGB0L7RgNGC0LjRgNC+0LLQsNGC0Ywg0YHQuNC80LLQvtC70Ysg0LIg0YHRgtGA0L7QutC1INCyINC/0L7RgNGP0LTQutC1INGD0LHRi9Cy0LDQvdC40Y8g0YfQsNGB0YLQvtGC0Ysg0LjRhSDQstGB0YLRgNC10YfQsNC10LzQvtGB0YLQuFxuXG4iICk7IAogICAgcGFyc2Vfc3RyaW5nKCBzdHJpbmcgKTsKICAgIGJ1YmJsZVNvcnQoIGZyZXFfdGFibHMsICAyNTYpOwogICAgZm9yICggaSA9IDA7IGkgPCAyNTY7IGkrKyApCiAgICB7CiAgICAgICAgaWYgKCBmcmVxX3RhYmxzWyBpIF0uY291bnQgPT0gMCApIHsKICAgICAgICAgICAgYnJlYWs7IC8vINGCLtC6LiDQvNCw0YHRgdC40LIg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC9LCDRgtC+INC/0L7RgdC70LUg0L/QtdGA0LLQvtCz0L4g0L3Rg9C70Y8g0LLRgdC1INC+0YHRgtCw0LvRjNC90YvQtSDQtC7QsS4g0YLQvtC20LUg0L3Rg9C70LgKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiQ9C40LzQstC+0LsgJyVjJy4g0J7QvSDQstGB0YLRgNC10YfQsNC70YHRjyAlZCDRgNCw0LdcbiIsIGZyZXFfdGFibHNbaV0uc2ltLCBmcmVxX3RhYmxzW2ldLmNvdW50ICk7CiAgICB9Cn0=