2010-05-05 31 views
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; 
    } 
} 

它正確地識別出有在第一行中的句子90個字母,打印出大寫字母按結構在所述第二for循環的一行,並打印出它發生的次數。它不斷打印0的概率。我究竟做錯了什麼?

+0

「聖荷西 - 舊金山 - 奧克蘭在第二最高學歷達標既學士和碩士學位程度,以及之後的第二最高的家庭收入中位數Washington-Baltimore-Northern Virginia「Damm you Washington;) – 2010-05-05 22:42:30

+0

洛爾,我希望在完成計算機科學學位課程後加入公務員隊伍時獲得最高中等收入的一部分。 – Mike 2010-05-05 22:44:47

回答

7

當你除以sum發生時,你將int整除,這會被截斷(在這種情況下爲0)。將結果分配給雙精度並不重要。爲了解決這個問題,蒙上發生雙師前:

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

啊,我認爲這可能與數學有關,但我不確定要改變什麼。這解決了它。謝謝。 – Mike 2010-05-05 22:43:14

+1

更有效的替代方案是將sum作爲雙重參數。有了這個修復,'int sum'在每次迭代中被轉換爲兩倍。 – MSalters 2010-05-06 08:59:22

+0

@ MSalters,好點。 – tloflin 2010-05-06 15:01:22