我使用公式计算出现字符的频率
(出现的字符数/行长度)*100
由于某种原因,它输出 0。
频率变量本身就是double格式,如果是int,当然就很清楚为什么是0了。
但事实是,即使使用断点和逐步调试,编译器也会写入 0.000000。
void calculate_symb(FILE *fd)
{
int max=0;
fd=fopen("test.dat","rb");
if (!fd)
printf("Ошибка!Файл не найден!\n");
else
{
fseek(fd,0L,SEEK_END);
long fsize=ftell(fd);
int n=fsize;
cout<<"Количество символов в файле = "<<fsize<<endl;
char* symv = new char[n];
symv[n+1]='\0';
fseek(fd,0L,SEEK_SET);
cout<<"Вывод содержимого двоичного файла:"<<endl;
for(int i = 0; i<n; i++)
{
fread(symv, sizeof(char), n, fd);
cout << symv[i];
}
fclose(fd);
cout<<endl;
int l=strlen(symv);
cout<<"Повторяющиеся символы:"<<endl;
for(int x = 0; x<l-1; x++)
{
bool flag = true;
if(isalnum(symv[x]))
for(int y = x-1; y>=0 && flag; y--)
if(symv[x] == symv[y])
flag = false;
if(flag&&isalnum(symv[x]))
cout<<"\""<<symv[x]<<"\""<<" -> "<<count(symv,symv+l,symv[x])<<endl;///Здесь выводится количество встречающихся символов
double frequency = (count(symv,symv+l,symv[x])/l)*100;///---Здесь пытаюсь подсчитать частоту,формула.
cout<<"Частота символа = "<<frequency<<endl;
}
}
}
代替
在
PS:在帮助下计算字符串中的字符非常容易
std::map
让我们从你拥有的开始
选择
n
了数字从 0 到n-1
的字符,但您重置了数字为 的字符n+1
。然后你一个字一个字地
n
读n
...但是这一切都是扯淡,因为
double
你是把整数除法等于0的结果赋值给一个类型变量,这count()
显然小于l
) ...嗯,你回答了。你在算计
int
!那么你分配它的事实有什么用double
呢?PS 但是你的算法......为什么所有这些手势都带有嵌套循环?