1

文中に文字が出現する回数を計算し、それに基づいて文に出現する確率を計算する関数があります。これを達成するために、私は文を持っています:

ワシントンメトロポリタンエリアは、米国で最も教育を受けた裕福なメトロポリタンエリアです。

文字、発生回数、発生確率を含む構造体の配列。文字文字ごとに1つの構造体と、句読点とスペース用の追加の構造体が含まれます。

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;
     }
}

1行目の文に90文字あることを正しく識別し、forループの2行目の構造に従って大文字を出力し、発生回数を出力します。確率として0を継続的に出力します。私は何が間違っているのですか?

4

1 に答える 1

7

発生を合計で除算すると、intをintで除算します。intは切り捨てられます(この場合は0になります)。結果をdoubleに割り当てているかどうかは関係ありません。これを修正するには、分割の前にキャストがダブルに発生します。

box[c8].prob = ((double)box[c8].occur)/sum;
于 2010-05-05T22:38:40.860 に答える