2012-12-16 78 views
0

我無法得到這個處理大文件。我改變了使用數組映射到地圖,因爲這可能有幫助。任何建議表示讚賞。使用地圖來計算大數據

map<char,int> freq; 
size_t size = 0; 
for (char c; cin.get(c); size++){ 
    if (isalpha(c)) 
     freq[tolower(c)]++; 
     } 
cout << "char" << freq['a'] << endl; 
+0

究竟是你想實現什麼目標? –

+0

我正在計算我的文件中的每個小寫字母。 – harman2012

+1

@ harman2012:從代碼中,你似乎正在計算所有字母,大寫或小寫。 –

回答

2

由於char由標準只有八位,使用整個地圖爲它是相當浪費的。申報的256 int秒的陣列中,使您的charunsigned,並計算頻率最快可以想象:

int freq[256]; 
size_t size = 0; 
// Count without any checks or conditions 
for (char c ; cin.get(c) ; size++) { 
    freq[(unsigned char)c]++; 
} 
// Go through the lowercase letters, and add upper frequencies to them 
for (int i = 'a' ; i <= 'z' ; i++) { 
    freq[i] += freq[toupper(i)]; 
    cout << (char)i << " --> " << freq[i] << endl; 
} 
+0

我改變了'freq [tolower(i)]'但是在執行後,沒有輸出。 – harman2012

+1

@ harman2012這很奇怪:即使所有計數都爲零,也應該得到26行輸出。你如何將輸入傳遞給你的程序?你使用文件重定向嗎?你確定你正在終止你的程序嗎? – dasblinkenlight

+0

我正在使用a.out文件'ifstream cin(argv [1])''。 – harman2012