RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 553552
Accepted
beginner
beginner
Asked:2020-08-09 19:38:55 +0000 UTC2020-08-09 19:38:55 +0000 UTC 2020-08-09 19:38:55 +0000 UTC

不计算频率,输出 0 [关闭]

  • 772
关闭 这个问题是题外话。目前不接受回复。

寻求调试帮助的问题(“为什么这段代码不起作用? ”)应该包括所需的行为、具体问题或错误,以及在问题中正确重现它的最少代码。没有明确描述问题的问题对其他访问者来说是无用的。请参阅如何创建最小、独立且可重现的示例。

6 年前关闭。

改进问题

我使用公式计算出现字符的频率

(出现的字符数/行长度)*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;
}
}
}
c++
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    yrHeTateJlb
    2020-08-09T20:02:20Z2020-08-09T20:02:20Z

    代替

    double frequency = (count(symv,symv+l,symv[x])/l)*100;
    

    在

    double frequency = (static_cast<double>(count(symv,symv+l,symv[x]))/l)*100;
    

    PS:在帮助下计算字符串中的字符非常容易std::map

    #include <iostream>
    #include <string>
    #include <map>
    
    int main(){
        std::string str = "What is your name?";
    
        std::map<char, int> m;
        for(std::string::const_iterator it = str.begin(); it != str.end(); ++it){
            m[*it]++;
        }
    
        for(std::map<char, int>::const_iterator it = m.begin(); it != m.end(); ++it){
            std::cout << it->first << " - " << it->second << std::endl;
        }
    }
    
    • 2
  2. Harry
    2020-08-09T19:51:08Z2020-08-09T19:51:08Z

    让我们从你拥有的开始

    char* symv = new char[n];
    symv[n+1]='\0';
    

    选择n了数字从 0 到n-1的字符,但您重置了数字为 的字符n+1。

    然后你一个字一个字地n读n...

     for(int i = 0; i<n; i++)
     {
        fread(symv, sizeof(char), n, fd);
    

    但是这一切都是扯淡,因为double你是把整数除法等于0的结果赋值给一个类型变量,这count()显然小于l) ...

    频率变量本身就是double格式,如果是int,当然就很清楚为什么是0了。

    嗯,你回答了。你在算计 int!那么你分配它的事实有什么用double呢?

    PS 但是你的算法......为什么所有这些手势都带有嵌套循环?

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5