c言語でファイルを読み込んだ後に、単語数をカウントするコードを書いています。
Today=1
we=2
というように表示されるプログラムを目指しているのですが、コンパイルをすると下にある画像のように
Today=2097185
we=2097186
となってしまいます。どうしたら正しく表示されるようになりますか?
また余裕がありましたら大文字、小文字を区別せずカウント(the=Theと認識しカウント)する方法やコンマやピリオドを単語から離れさせてカウント(today.→today)する方法も教えていただきたいです。
以下作成した文書ファイルの引用、ソースコード、コマンドプロンプトの画像です。
Today we had a nice warm day. The day before yesterday was pretty cloudy. I forgot the name of the girl whom we met in the restaurant today.
#include <stdio.h> #include <string.h> #define LIST_MAX 1000 #define SENTENCE_MAX 1000 int main(){ int i,j,count[LIST_MAX]; char ch, Slist[LIST_MAX][SENTENCE_MAX],Wlist[SENTENCE_MAX]; FILE *fp; fp = fopen("test.txt","r"); for(i=0; i<LIST_MAX; i++){ Wlist[i]=0; //0から開始 sentence[i]=0? } j=0; do{ ch =fgetc(fp); //条件に当てはまったら一文字ずつすすむ while(ch == ' ' || ch == '\n' || ch == '\t') ch=fgetc(fp); i=0; Wlist[i]=ch; while((ch=fgetc(fp)) !=' ' && ch!='\n' && ch!='\t' && ch!=EOF){ Wlist[++i]=ch; } Wlist[++i]='\0'; for(i=0; i<j; i++){ if(strcmp(Wlist,Slist[i])==0){ count[i]++; break; } } if(i==j){ j++; strcpy(Slist[j-1],Wlist); count[j-1]++; } }while((ch != EOF)); for(i=0; i<j ;i++){ /*リストが埋まったところまで(空のところまで)*/ printf("%s = %d\n",Slist[i],count[i]); } fclose(fp); }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/24 13:52