配列の中身が変わってしまいます
英単語中のアルファベットの数を数えるプログラムをCで作っています。
------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NS 69964 /* 入力の最大数 */
#define WC 64 /* 入力の1行の文字数 */
int main(int argc, char *argv[]) {
FILE *fp;
char str[NS][WC];
int al[NS][26] = {0};
int i, j, k;
//コマンドライン引数でテキストファイルを読み込む
fp = fopen(argv[1],"r");
//テキストファイル内の単語を1行ごとにstr[]に格納
//改行文字は除き,大文字は小文字にする
for(i = 0; i < NS; i++){
fgets(str[i], WC, fp);
strtok(str[i], "\n");
for(j = 0; j < WC; j++) str[i][j] = tolower(str[i][j]);
}
printf("File reading completed.\n");
//カウントする
//'a'~'z'の数がal[][0]~al[][25]の値に対応
//例えば'a'が2個,'z'が3個ならal[][0]=2,al[][25]=3
for(i = 0; i < 5; i++)
for(j = 0; j < 20; j++)
al[i][str[i][j] - 'a']++;
//al[][]の中身を表示
for(i = 0; i < 5; i++)
for(j = 0; j < 26; j++)
printf("al[%d][%d]:%d\n", i, j, al[i][j]);
fclose(fp);
return 0;
}
--------------------------------------------------
for(i = 0; i < 5; i++)
for(j = 0; j < 20; j++)
al[i][str[i][j] - 'a']++;
の処理を終えた後、al[][]の中身を見てると
al[][7]の値だけがおかしいのです。'h'の数を数えているはずなのですが・・・
for文中でprintfしてみたのですがこのときは正しく数えられています。
ですがfor文を抜けた途端al[][7]の値が変わってしまいます。
これはどういうことなのでしょうか?
修正もしくは別の方法があれば教えてください。
お礼
こちらの質問も、タイプミスで間違えがありました(本当にごめんなさい!) × uiaの処理がよくわからないのです ○ uieの処理がよくわからないのです それでも質問の意図をご理解下さって、素晴らしいご回答をくださり、本当に感謝しています。 guiのu 自体はサイレントでも、音節分けの時はいれて考えるものだと思っていました。大変勉強になりました!有り難うございました!