Есть следующее задание: Первый наиболее часто встречающийся символ кодируется битом 0. Бит 1 кодирует группу из всех остальных символов. Код 10 кодирует второй по частоте символ, 11 - группу всех остальных и т.д.. Разработать функцию упаковки строки
Есть вот такой код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
char str[256]; //строка
unsigned char outarray[256]; //выходной массив
unsigned char amounth_elem=0; //количество элементов
char filse_name[256];
FILE *fp;
void package()
{
int frequencies[256]={0}; //частота появления символа
int i,tmp;
int j,cnt,flag=0;
printf("");
for(i=0;str[i]!='\0';i++)
{
tmp=str[i]; //сохраняем код тек. символа
if(frequencies[tmp]==0)
amounth_elem++;
frequencies[tmp]++; //увеличиваем частоту соответствующего символа
}
//******************sort*********************
for (i=0;i<256;i++)
{
for ( cnt=0,j=0; j<256; j++)
if(frequencies[j]!=0 && frequencies[i]!=0)
{ if (frequencies[j] < frequencies[i]) cnt++;
else
if (frequencies[j]==frequencies[i] && j<i) cnt++;
flag=1;
}
if(flag==1)
outarray[cnt]=i;
flag=0;
}
//******************end sort*****************
/*for (i=0;i<amounth_elem;i++)
{ printf("");
printf("%d ",outarray[i]);
}
printf("amount simbols: %d ",amounth_elem);
}
*/
}
void write_in_file()
{
printf("Input files name for save:");
gets(filse_name);
fp=fopen(filse_name,"w");
if(fp==NULL)
printf("error open file");
else
{
fprintf(fp,"%c",amounth_elem);
}
fclose(fp);
}
void read_file()
{
printf("Input files name:");
gets(filse_name);
fp=fopen(filse_name,"r");
if(fp==NULL)
printf("can not open file!");
else
{
fscanf(fp,"%c",&amounth_elem);
}
printf("%d",amounth_elem);
fclose(fp);
}
int main()
{
clrscr();
printf("Enter string for packing:");
gets(str);
str[256]='\0';
package();
write_in_file();
read_file();
// F2();
return 0;
}
Т.е. естькод, который определяет к-во вхождений символов в строке и сортирует их по частоте (первый символ, тот, который меньше раз повторяется в строке; последний - наиболее часто повторяющийся).
Не могу разобраться как с использованием битов поместить закодированую строку в файл :(
Помогите пожалуйсто!