int freq[256] = { 0 };
int c;
while((c = fgetc(f)) != EOF)
{
freq[c]++;
}
......
for(int i = 0; i < 256; ++i)
{
if (freq[i] == 0) continue;
printf("Char %c: %d\n",i,freq[i]);
}
Помогите сделать,пожалуйста!Помогите срочно Пожалуйста!с++.подсчитать вероятности символов, встречающихся в текстовом файле. Отсортировать вероятности символов по убыванию
Помогите срочно Пожалуйста!Нужно подсчитать вероятности символов, встречающихся в текстовом файле. Отсортировать вероятности символов по убыванию
Причем тут вероятность? В конкретном файле ровно столько то букв "а", столько-то "б". Или речь идет все-таки о случайных выборках букв из файла? Для огромных файлов так целесообразно поступать, например. Задача не ясна - либо тупой подсчет букв, либо методы обсчета выборок.
исходник:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void BSort(int A[], int n)
{
int temp,min,i,j,B[n];
for(i=0;i<n;i++)
B=A;
for(i=0;i<n-1;i++)
for (j=n-1;j>i;j--)
{
if (B[j-1]>B[j])
{
temp=B[j];
B[j]=B[j-1];
B[j-1]=temp;
}}
printf("Ìàññèâ ïî óáûâàíèþ:", B[j]);
}
void prf(int A[], int n)
{
int i;
for (i=0;i<n;i++)
printf("A[%d] =%6.0d\n",i,A);
}
int main()
{FILE *tekst;
int i, simv;
char ch;
char bukv [150];
int sum = 0; //çàïîëíåíèå ñòðîêè
if ((tekst = fopen("tekst.txt","r")) == NULL) {
printf ("îøèáêà îòêðûòèÿ ôàéëà");
getch();
exit(1);
}
tekst = fopen("tekst.txt","r");
while (!feof(tekst)) //Ïîêà íå äîøëè äî êîíöà ôàéëà
{
ch = fgetc(tekst); // Ñ÷èòûâàåì ïî îäíîìó ñèìâîëó
if(ch == ' ' || ch == '\n' || ch == '\t' || ch == ',') simv++; //Ñ÷èòàåò òî÷êè, ïåðåõîä íà ñëåäóùóþ ñòðîêó è òàáóëÿöèþ.
}
fseek(tekst,0,SEEK_SET); //Ïåðåõîä â íà÷àëî ôàéëà.
printf("simv: %i", simv);
while (!feof(tekst)) //Ïîêà íå äîøëè äî êîíöà ôàéëà
{
ch = fgetc(tekst); // Ñ÷èòûâàåì ïî îäíîìó ñèìâîëó
{
if (i=='à')
sum++;
return sum;
}
{
if (i=='á')
sum++;
return sum;
}
{
if (i=='â')
sum++;
return sum;
}
{
if (i=='ã')
sum++;
return sum;
}
{
if (i=='ä')
sum++;
return sum;
}
{
if (i=='å')
sum++;
return sum;
}
{
if (i=='¸')
sum++;
return sum;
}
{
if (i=='æ')
sum++;
return sum;
}
{
if (i=='ç')
sum++;
return sum;
}
{
if (i=='è')
sum++;
return sum;
}
{
if (i=='é')
sum++;
return sum;
}
{
if (i=='ê')
sum++;
return sum;
}
{
if (i=='ë')
sum++;
return sum;
}
{
if (i=='ì')
sum++;
return sum;
}
{
if (i=='í')
sum++;
return sum;
}
{
if (i=='î')
sum++;
return sum;
}
{
if (i=='ï')
sum++;
return sum;
}
{
if (i=='ð')
sum++;
return sum;
}
{
if (i=='ñ')
sum++;
return sum;
}
{
if (i=='ò')
sum++;
return sum;
}
{
if (i=='ó')
sum++;
return sum;
}
{
if (i=='ô')
sum++;
return sum;
}
{
if (i=='õ')
sum++;
return sum;
}
{
if (i=='ö')
sum++;
return sum;
}
{
if (i=='÷')
sum++;
return sum;
}
{
if (i=='ø')
sum++;
return sum;
}
{
if (i=='ù')
sum++;
return sum;
}
{
if (i=='ú')
sum++;
return sum;
}
{
if (i=='û')
sum++;
return sum;
}
{
if (i=='ü')
sum++;
return sum;
}
{
if (i=='ý')
sum++;
return sum;
}
{
if (i=='þ')
sum++;
return sum;
}
{
if (i=='ÿ')
sum++;
return sum;
}}
fseek(tekst,0,SEEK_SET);
printf("\nÂåðîÿòíîñòè ñèìâîëîâ: %i",bukv);
}
int main()
{
int *A,n=10;
A=(int *) malloc(n*sizeof(int));
BSort(A,n);
getch();
return 0;
}
Вобщем, на коленке, не компилируя - просто сама идея:
Код:
А, да! там же еще сортировка...
Тогда
Код:
struct {
int freq;
char c;
} freq[256] = { 0 }; // Вообще-то это С++ объявление, как там в С - смотрите сами
int c;
for(int i = 0; i < 256; ++i)
{
freq[i].c = i;
freq[i].freq = 0;
}
.......
while((c = fgetc(f)) != EOF)
{
freq[c].freq++;
}
......
for(int i = 0; i < 256; ++i)
{
if (freq[i] == 0) continue;
printf("Char %c: %d\n",i,freq[i]);
}
qsort(freq,sizeof(freq[0]),256,compare);
int freq;
char c;
} freq[256] = { 0 }; // Вообще-то это С++ объявление, как там в С - смотрите сами
int c;
for(int i = 0; i < 256; ++i)
{
freq[i].c = i;
freq[i].freq = 0;
}
.......
while((c = fgetc(f)) != EOF)
{
freq[c].freq++;
}
......
for(int i = 0; i < 256; ++i)
{
if (freq[i] == 0) continue;
printf("Char %c: %d\n",i,freq[i]);
}
qsort(freq,sizeof(freq[0]),256,compare);
Слушайте, у вас все же как в тегах - C, или как в заголовке - C++?!
поясните пожалуйста, что означают EOF, и qsort(freq,sizeof(freq[0]),256,compare);
Цитата: АленаСТ
с++.
поясните пожалуйста, что означают EOF, и qsort(freq,sizeof(freq[0]),256,compare);
поясните пожалуйста, что означают EOF, и qsort(freq,sizeof(freq[0]),256,compare);
Если C++, то читать лучше, используя поток, а сортировать - используя sort() из STL. Но можно и так.
EOF - если считан символ EOF, это значит, что достигнут конец файла (Enf Of File), а qsort - стандартная библиотечная функция для сортировки. Ей передается массив каких-то элементов, указывается их количество и размер, и указатель на функцию, которая сравнивает два элемента.
Простите,за глупые вопросы,я только учусь, а что означает freg?просто счетчик?
Вообще, если можно поясните свои действия. я примерно понимаю,но не все
см. здесь, например.
О библиотечных функциях
А freq - это пользовательский массив структур, содержащих символ в одном из полей, а в другом его частоту. Начните наконец сами немного вникать, а не ждать пока разжуют.
За меня все ответили, sadovoya, спасибо!