入力文字列内の各文字の出現回数をカウントする次のコードがあります。while ループは正しく実行されます。これで、'a's in 、'b's inなどarr[]
の数が含まれるようになりました。arr[0]
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]);
}
}