【问题标题】:Function calculating the probability of a letter in an sentence计算句子中字母概率的函数
【发布时间】:2011-02-16 03:52:17
【问题描述】:

我有一个函数应该计算一个字母在句子中出现的次数,并基于此计算它在句子中出现的概率。为此,我有一句话:

华盛顿都会区是美国受教育程度最高、最富裕的都会区。

结构数组,包含字母、出现次数和出现概率,每个字母字符都有一个结构,标点符号和空格有一个附加结构:

struct letters
{
  char letter;
  int occur;
  double prob;
}box[53];

这是函数本身:

void probability(letters box[53], int sum
{
     cout<<sum<<endl<<endl;
     for(int c8=0;c8<26;c8++)
     {      
       box[c8].prob = (box[c8].occur/sum);
       cout<<box[c8].letter<<endl;
       cout<<box[c8].occur<<endl;
       cout<<box[c8].prob<<endl<<endl;
     }
}

正确识别出第一行句子中有90个字母,按照for循环第二行的结构打印出大写字母,打印出出现次数。它不断地为概率打印 0。我做错了什么?

【问题讨论】:

  • “圣何塞-旧金山-奥克兰在学士和硕士学位方面的教育程度位居第二,家庭收入中位数仅次于华盛顿-巴尔的摩-北弗吉尼亚”该死的华盛顿; )
  • 大声笑,我希望在完成计算机科学学位后加入公务员队伍时,能分到最高收入中位数。

标签: c++ probability character letters


【解决方案1】:

当您将发生除以总和时,您将一个 int 除以一个 int,它会截断(在这种情况下为 0)。将结果分配给双精度并不重要。为了解决这个问题,在除法之前强制转换为双精度:

box[c8].prob = ((double)box[c8].occur)/sum;

【讨论】:

  • 啊,我认为这可能与数学有关,但我不确定要更改什么。那解决了它。谢谢。
  • 一个更有效的替代方法是将sum 作为双参数传递。通过此修复,int sum 在每次迭代中都被强制转换为双倍。
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 2021-05-03
  • 1970-01-01
  • 2017-09-20
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多