fork download
  1. #include <stdio.h>
  2.  
  3. struct str
  4. {
  5. char sim;
  6. int count;
  7. };
  8. struct str freq_tabls[ 256 ];
  9. void parse_string(const char* str)//подсчет количества символов
  10. {
  11. int i;
  12. for(i=0;i<256;++i)
  13. {
  14. freq_tabls[i].sim=i;
  15. freq_tabls[i].count=0;
  16. }
  17. while(*str)
  18. freq_tabls[(unsigned char)*str++].count++;
  19. }
  20. void bubbleSort( struct str *b, int size )
  21. {
  22. struct str tmp;
  23. int i, j;
  24. for(i = 0; i < size - 1; ++i)
  25. {
  26. for(j = 0; j < size - 1; ++j)
  27. {
  28. if (b[j + 1].count > b[j].count) // обрати внимание, что знак д.б. "больше", т.к. тебе надо сортировать по убыванию
  29. {
  30. tmp = b[j + 1];
  31. b[j + 1] = b[j]; // вот тут копируется как ключ (count), так и символ (sim)
  32. b[j] = tmp;
  33. }
  34. }
  35. }
  36. }
  37.  
  38. int main()
  39. {
  40. char string[1024];
  41. int i;
  42. printf( "\n\nВведите строчку: \n" );
  43. gets(string);
  44. printf( "\nЗадание 2.\n Отсортировать символы в строке в порядке убывания частоты их встречаемости\n\n" );
  45. parse_string( string );
  46. bubbleSort( freq_tabls, 256);
  47. for ( i = 0; i < 256; i++ )
  48. {
  49. if ( freq_tabls[ i ].count == 0 ) {
  50. break; // т.к. массив отсортирован, то после первого нуля все остальные д.б. тоже нули
  51. }
  52. printf( "Cимвол '%c'. Он встречался %d раз\n", freq_tabls[i].sim, freq_tabls[i].count );
  53. }
  54. }
Success #stdin #stdout 0s 3300KB
stdin
cbcabcacbcba
stdout

Введите строчку: 

Задание 2.
 Отсортировать символы в строке в порядке убывания частоты их встречаемости

Cимвол 'c'. Он встречался 5 раз
Cимвол 'b'. Он встречался 4 раз
Cимвол 'a'. Он встречался 3 раз