2011-12-06 25 views
0

我想用這段文字來計算文件中的字母:陣列用C專櫃

「abbcccddddeeeeeffffff ........ zzzzzzzzzzzzzzzzzzzzzzzzzz」

我想創建爲了做到這一點 :計數器陣列

count[0] = 1 /* # of a's */ 
count[1] = 2 /* # of b's */ 

/* ... */ 

count[25] = 26 /* # of z's */ 

這是我的第一種方法

#include<stdio.h> 
#include<ctype.h> 

int main() { 
    int count[26]; 
    int i; 
    int c; 
    for(i=0; i<26; i++){ 
     count[i] = 0; 
    } 

    while ((c = getchar()) != EOF) { 
     if (isalpha(c)) { 
     count[i] ++; 
     } 
    } 
} 

}

+0

可以 '' 使用 'C' '' 到索引的ASCII值轉換: '' 'C-'A' '' '或 ''' C -'A'''',取決於輸入的情況(上/下)。 –

+3

歡迎來到Stack Overflow!看起來你在這裏手工輸入你的第一個方法。對於這個特定的問題,這並不重要,但是當這裏討論的代碼不是你正在測試的實際代碼時,人們(嗯,_me_)會得到ornery並開始向下投票。 (請注意'counr [i]' - 無法編譯。)複製並粘貼您的代碼。不要從記憶中重新輸入。謝謝! – sarnold

+0

檔案在哪裏? –

回答

5

您需要做的是將字符轉換爲數組中的索引。你可以通過從字符中減去'a'來做到這一點,那將是索引。例如:

'a' - 'a' == 0 
'b' - 'a' == 1 
... 
'z' - 'a' == 25 

並且使用該索引,您知道要增加的元素。對此索引進行檢查可能會很好,因此c - 'a' >= 0 && c - 'a' < 26因此您不會在數組邊界之外進行索引。

此外,請務必到陣列中的每個元素初始化到0,使每個字符的數量從0開始在第一,這樣的:

int count[26] = { }; 

這將所有元素設置爲0

使陣列包含字母的大寫和小寫版本的計數,例如同時你也可能想使用tolower(c) - 'a',而不是僅僅c = 'a',這樣就會使字母小寫無論是小寫與否'a''A'將遞增count[0]。但這取決於你以及你希望你的程序如何工作。

此外,您的代碼不讀取文件,它使用從stdin(控制檯)讀取的getchar。看看fopen,fclosefread來讀取文件並處理它的內容。

-2

我認爲你應該自己做作業。

不管怎樣,試試這個:

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
    int count[26]; 
    int i, c; 
    for(i = 0; i < 26; i++) 
    { 
     count[i] = 0; 
    } 
    while ((c = getchar()) != EOF) 
    { 
     if (isalpha(c)) 
     { 
      ++count[tolower(c) - 'a']; 
     } 
    } 
} 
+7

「我認爲你應該自己做作業......所以這裏是答案,呵呵?而且,它被打破爲大寫字母。 –