我有以下代碼來計算輸入字符串中每個字母的出現次數。 while循環正確執行。現在我有arr[]
包含'a的數量在arr[0]
','b的在arr[1]
等等。打印輸入流中每個字母的出現
但是,以下printf
不顯示arr
的完整內容。 (下面給出樣本o/p)。
如果我完全評論while循環,printf
打印所有26 arr[]
值罰款! 在這個簡單的程序中我可能會錯過什麼?
如果它的任何幫助,我使用VS 2008
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF) {
if('a' <= c && 'z' >= c) {
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++) {
printf("arr[%d] = %d\n", count, arr[count]);
}
,我得到的輸出(保持不同的不同的輸入):
abcxyz
arr[0] = 1
arr[1] = 1
^CPress any key to continue . . .
abcabc
arr[0] = 2
arr[1]
^CPress any key to continue . . .
@Nobilis:更新代碼佔大寫字母,也使打印更有意義:)
int main()
{
int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while((c = getchar()) != EOF)
{
if('a' <= c && 'z' >= c)
{
idx = c - 'a';
arr[idx] = arr[idx]+1;
}
if('A' <= c && 'Z' >= c)
{
idx = c - 'A';
arr[idx] = arr[idx]+1;
}
}
for(count = 0; count < 26; count++)
{
printf("%c or %c = %d\n", ('A'+count), ('a'+count), arr[count]);
}
}
你的問題是不是所有的輸入字符都被計算在內?我剛剛用輸入'abcabc'運行你的代碼,我正確地計數了:'arr [0] = 2 arr [1] = 2 arr [2] = 2'。你有沒有得到任何警告(除了未使用的'我')? – Nobilis
旁邊: int arr [26] = {'\ 0'}; 你的代碼是完全正確的。你應該在另一個地方尋找問題。 對於你的數組初始化,你正在用char初始化int。這是完全合法的C,並且工作正常,但不是你應該習慣的。 – Geod24
輸入字符計數正常。如果我輸入爲'abcxyz',我看到(使用VS調試器)arr [0],arr [1],arr [2]和arr [23],arr [24],arr [25]包含1。所有其他arr值爲0.但是,當我嘗試打印出來時,我得到以下不完整的輸出:'abcxzy arr [0] = 1 arr [1] = 1^C按任意鍵繼續。 。 「。 – VivereJay