我無法得到這個處理大文件。我改變了使用數組映射到地圖,因爲這可能有幫助。任何建議表示讚賞。使用地圖來計算大數據
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;
我無法得到這個處理大文件。我改變了使用數組映射到地圖,因爲這可能有幫助。任何建議表示讚賞。使用地圖來計算大數據
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;
由於char
由標準只有八位,使用整個地圖爲它是相當浪費的。申報的256 int
秒的陣列中,使您的char
爲unsigned
,並計算頻率最快可以想象:
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;
}
我改變了'freq [tolower(i)]'但是在執行後,沒有輸出。 – harman2012
@ harman2012這很奇怪:即使所有計數都爲零,也應該得到26行輸出。你如何將輸入傳遞給你的程序?你使用文件重定向嗎?你確定你正在終止你的程序嗎? – dasblinkenlight
我正在使用a.out文件'ifstream cin(argv [1])''。 – harman2012
究竟是你想實現什麼目標? –
我正在計算我的文件中的每個小寫字母。 – harman2012
@ harman2012:從代碼中,你似乎正在計算所有字母,大寫或小寫。 –