Расположить буквы в порядке уменьшения частоты их употребления

learning

Нужен код или хотя бы алгоритм. Буквы заданы в вещ-м массиве, который уже создан
9 ответов

learning

т.е. символьномдля Borland c++


learning

массив как выглядит, покажите хоть


learning

#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
char t[1000];
main()
{ clrscr();
  fstream f;
  f.open("baza.txt",ios::in);
  if(!f){cout<<"\n Oshibka pri  otkritii faila\n";
  exit(0);}
  while(!f.eof())
  f.getline(t,1000);
  f.close();
cout<<t;getch();getch();
  int i,k=1;
  char B[100];B[0]=t[0];
  for(i=0;i<1000;i++)
  {if((t[i]!=' ')&&(t[i-1]==' '))  {B[k]=t[i];k++;}
  }
  cout<<"\n\n\n";
for(i=0;i<k;i++){cout<<B[i];}

  getch();

}
на выводе сам текст а потом в строчку первые буквы


learning

прочитать в массив:
#include <stdio.h>
 
#define FIRSTCH 32
#define LASTCH 255
 
int main()
{
    FILE *fstream;
    int c, letters[LASTCH] = {0};
      
    if ((fstream = fopen("baza.txt", "r")) != NULL)
       while((c = getc(fstream)) != EOF) letters[с]++;
    else
        perror("Error file opening"); 
}
в итоге заимеем: letters[код_символа] == кол-во повторений этого символа отсортировать можно любым удобным способом.НО! Сортировать будем значения массива. Индексы останутся на месте. Т.е. Нужно вместе со значением сортировать и индекс.


learning

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


learning

mokojumbot, можно ввести структуру, где одним полем будет сам символ, а вторым - его число повторений. Т.е. что-то вроде этого:
#include <stdio.h>
#include <stdlib.h>
 
#define MINCHR  32
#define MAXCHR 255
 
int main()
{
   const char CFileName[] = "program.c";
 
   struct TPair
   {
      int chr;
      int count;
   }  letter[MAXCHR], tmp;
 
   FILE* f;
 
   int i, j, chr, max;
 
   for (i = 0; i < MAXCHR; ++i)
   {
      letter[i].chr = i;
      letter[i].count = 0;
   }
 
   f = fopen(CFileName, "r");
 
   if (f == NULL)
   {
      perror(CFileName);
      return EXIT_FAILURE;
   }
 
   while ((chr = fgetc(f)) != EOF)
   {
      if (chr > MINCHR)
      {
         letter[chr].count++;
      }
   }
 
   fclose(f);
 
   for (i = 0; i < MAXCHR - 1; ++i)
   {
      max = i;
      for (j = i + 1; j < MAXCHR; ++j)
      {
         if (letter[max].count < letter[j].count)
         {
            max = j;
         }
      }
      tmp = letter[max];
      letter[max] = letter[i];
      letter[i] = tmp;
   }
 
   for (i = 0; (i < MAXCHR) && (letter[i].count > 0); ++i)
   {
      printf("'%c' = %d\n", letter[i].chr, letter[i].count);
   }
 
   return EXIT_SUCCESS;
}


learning

anmartex, а можно с объяснением?


learning

anmartex, конечно, но там же с массивами просили..


learning

у меня до этого этапа есть код, теперь надо именно с созданным массивом