単語数のカウントについて
C言語のプログラミングについて質問させていただきます。
『一行の入力に対し,入力された英文の文字数,単語数,文字の使用頻度を数える』という問題なんですが、一応プログラムを組むことはできました。
しかし、今のプログラムのままでは単語間にを連続して入力しても単語数が増加してしまいます。
そこで、単語間の空白が2文字以上でも安定して単語数を正しく数えることができるようにするためにはどのように変更すればいいのか教えてください。
よろしくお願いします。
#include <stdio.h>
int main(void){
char line[100]; /* キーボード入力用汎用変数 */
int i; /* 繰り返し用カウンタ */
char temporary; /* テンポラリ */
int moji_acount[128]; /* 文字カウンタ */
int moji_count = 0; /* 文字数 */
int tango_count = 0; /* 単語数 */
/* 文字カウンタの初期化 */
for(i=32;i<128;i++){
moji_acount[i] = 0;
}
/* 文字列の入力 */
printf("文字列:");
fgets(line, sizeof(line), stdin);
/* 繰り返し用カウンタの初期化 */
i = 0;
/* 文字数を数える作業 */
while(line[i] != '\n'&& line[i] != '\0'){
moji_count++;
i++;
}
/* 文字数の表示 */
printf("文字数:%d\n", moji_count);
/* 文字をテンポラリに保存 + 文字カウンタを数える作業 */
for(i=0;i<moji_count;i++){
temporary = line[i];
moji_acount[(int)temporary]++;
}
/* 入力された文字と回数を表示 */
for(i=32;i<128;i++){
if(moji_acount[i] != 0){ /* 文字カウンタがゼロでないときに繰り返し */
printf("'%c': %2d個\n", (char)i, moji_acount[i]);
}
}
/* 繰り返し用カウンタの初期化 */
i = 0;
/* 単語数を数える作業 */
while(line[i] != '\n' && line[i] != '\0'){
if(line[i] == ' '){ /* もしline[i]がスペースのとき */
tango_count++;
}
i++;
}
printf("単語数:%d個\n", tango_count + 1);
return 0;
}
お礼
ご回答ありがとうございました。 すみません、1)に関しては自己解決いたしました。日本語では、1字=1語あつかいのためのようです。英単語は1語でカウントされておりました。 2) に関してですが、せっかくですが、貼ってくださったリンク先の解説では回答になっておりませんでした。ステータスバーに、他の「文字数ダイアログ中の数字」を表示させる方法です。いまのところ、「出来ない」が正解なような気がしてきています…。