C言語で英文から各単語の出現回数を表示するプログラムをつくっているのですが、わ...
2011/4/3017:48:00
C言語で英文から各単語の出現回数を表示するプログラムをつくっているのですが、わからなくて悩んでいます。 He is a Heと入力したら
he 2個
is 1個
a 1個
と表示するようにしたいです。
自分で作ってみたプログラムは以下のとおりです。配列を2つ用意し、片方にファイルから読み込んだ文章を入力し、もう片方に検索する単語を入れます。 とりあえず自分で考えたやりかたでやったので、分かりにくいと思いますがプログラムに詳しい方よろしくお願いします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void){
FILE *fp;
char *s1;
char *s2;
char ss1[100]={ }; /*配列の中身を全部空欄(スペース)にする*/
char ss2[10]={ };
int i,count;
if((fp=fopen("reibunn","r"))==NULL){
printf("ファイルが見つかりません\n");
exit(EXIT_FAILURE);
}
for(i=0;i<100;i++){
if((ss1[i]=fgetc(fp))==EOF) /*ss1にファイルから文章を読み込む*/
break;
}
s1=ss1;
s2=ss2;
for(i=0;i<3;i++){ /*ファイルから読み込む文章がHe is a He としたため、単語の種類が3種類しかないのでとりあえず3回
繰り返しています*/
count=0;
while(' '==(*s1)){
s1++;
}
while((*s1)!=' '){
*s2=*s1;
s2++; /*配列ss2に単語を入力*/
s1++;
}
s1=ss1;
s2=ss2;
while((s1=strstr(s1,s2))!=NULL){
count++;
for(i=0;i<strlen(s2);i++){ /*文章中の検索した単語の部分を全部空欄にする*/
*s1=' ';
s1++;
}
}
printf("%s %d個\n",ss2,count);
s1=ss1;
s2=ss2;
}
fclose(fp);
return (EXIT_SUCCESS);
}
-------------------------------------
出力
he 2個
だけで終わってしまいます。どうやったら正しく表示されるのでしょうか。よろしくお願いします。
ベストアンサーに選ばれた回答
2011/5/112:37:01
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
FILE *fp;
char *p, *q;
char ss1[100];
char ss2[10] = " ";
int i, count;
if((fp=fopen("reibunn","r"))==NULL){
printf("ファイルが見つかりません\n");
exit(EXIT_FAILURE);
}
i = fread(ss1, sizeof *ss1, sizeof(ss1) / sizeof(*ss1) - 1, fp);
ss1[i] = '\0';
while( p = strpbrk(ss1, ".,:\"\n") ) *p = ' ';
p = strcat(ss1, " ");
for(;;) {
while( *p == ' ' ) p++;
if( *p == '\0' ) break;
q = &ss2[1];
while ( *p != ' ' ) *q++ = *p++;
strcpy(q, " ");
q = p;
for( count = 1; (q = strstr(q, ss2)) != NULL; count++ )
for( i = 0; i < strlen(ss2) - 1; i++ ) *q++ = ' ';
printf("%s%d個\n", &ss2[1], count);
}
return 0;
}
あわせて知りたい
- C言語について教えてください 与えられた文字列の各文字(A~Z)の出現回数を...
- 文字列の中の文字が出現する回数をカウントするプログラムを作ったのですが、動作...
- c言語初心者です。単語数をカウントするプログラミングを作りたいのですが、下記...
- 離散数学でグラフの同型と等しいの違いがいまいち分かりません。 グラフaとグラフ...
- Cのプログラミングについてです プログラム中に出てくる単語の出現回数を表示させ...
- C言語、文字列を先頭から 1文字ずつ表示する関数について。 とある教材の問...
- 「引張力」の読み方 引張力 これ、なんと読むのでしょうか・・・・。
- C言語で特定の文字をカウントするプログラムを作りたいのですが うまくいきませ...
- ビジュアルベーシック、ビジュアルスタジオの違いを教えてください。
- C言語で、アルファベットの出現頻度を表示するプログラムで、結果を配列ポインタ...
- C言語の問題で、線形リストを使って、文章中の単語の出現回数を調べるという問題...
- C言語でのプログラムについての質問です。 プログラミング初心者です。 5回の...
- プログラミングのアルゴリズムの組み立てに知恵を貸していただきたいです。 int型...
- 明日、部活ありますか?って英語で どう書きますか? お願いしますw
- 左辺値の問題に関する質問です。 C言語にて次のような宣言がされている。 int ...
- C言語についての質問です。 学籍番号を入力すると、学部と学年を表示するという...
- c言語でハッシュテーブルを用いて数列の記憶と回数を数えたいのですが、その実装...
- C言語で確立ごとに○△□を表示するプログラムをつくりたいと思い下のようなコードを...
- 至急教えてください!!C言語について質問です。 「テキストファイルtext.txt(英文...
- C言語での文字列検索についてです。 任意に入力した文字列の中から、決まった...
このカテゴリの回答受付中の質問
- またC言語の課題で 複数の人の名前と体重、身長を質問してBMI値を計算して、「名...
- Unityのbuild settingsで下の画像でsceneをbuildしたらエラーが出てきます。どう...
- C言語についてです。 c言語初心者です。 今、添付した写真のような「キーを入力...
- データ解析ソフトRをインストールしてRcmdrを使おうと思ったのですが、うまくいき...
- Xcodeについて質問です。 プログラムを書いて実行しても表示されません。 何故な...
- ファイル名一つをコマンドライン引数で指定し、コマンドライン引数が正しければ指...
- (c)の伝達関数を求めることがどうしても出来ません、有識者の方居ましたら教えて...
- C++で指定した値がスタックの先頭から何番目にあるかを調べるプログラムの作成を...
- Windows10 VisualStudio2019のMFCのプロジェクトの立ち上げ 時間に関する質問で...
- 要素数100の配列Aに100人分の得点が出力それている。80点以上の人数を数えて出力...
この質問につけられたタグ
カテゴリQ&Aランキング
- 戻る
- 次へ
総合Q&Aランキング
Yahoo!知恵袋カテゴリ
お客様自身の責任と判断で、ご利用ください。