アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校のレポートである一文の中から相異なる単語の出現頻度を求めよ。 と言う課題がでたのですが、コンパイルをしたらエラーがでます。いろいろいじったのですがやっぱりできません。力を貸して下さい。
下のはプログラムのわからない箇所の中見です。

combineの中に全て小文字の英文が入ってます。

struct compare {
char word[256][256];
int count;
}number[256];
を最初に作って、新しくでてきた単語をwordに、また同じ単語が被ったときにcountを一つずつ足していこうとおもってます。
あとbufferは比較するときに一時的に入れておくchar型の変数です。
自分の勝手な予想ですが、strcmpとかには構造体とかが入ったやつは使えないと思っています。
解決策を教えてください。

for(i = 0; i < 256; i++){
number[i].count = 0;
}

while(scanf("%s", combine) != EOF){
for(i = 0; i < num_word; i++){
if(strcmp(number[i].word, buffer) == 0){
number[i].count++;
break;
}
}
if(i == num_word){
strcpy(number[i].word, buffer);
num_word++;
}
}

for(i = 0; i < num_word; i++){
printf("%s は %d 回出ました。\n", number[i].word, number[i].count);
}

A 回答 (4件)

他の方の回答でOKなのだと思いますが、それとは別に初期化の部分で……



for(i = 0; i < 256; i++){
number[i].count = 0;
number[i].word[0] = '\0'; /* ← この部分 */
}

が必要かなと思います。
    • good
    • 0

あと、注意を忘れましたが combineはプログラムのつくりから変数になりますので定数にしないで下さい。



char combine[2000]; などとしないで。
    • good
    • 0

1.#1のかたのいうとうり、char word[256]; でよいです。

単語数文は number[256];すなわち、あなたのプログラムでも使用している number[i].word に入ります。
おそらく、ここがコンパイルエラーの原因でしょう。

2.あなたのプログラムで使用しているように strcmpとかには構造体とかが入ったやつは使えます。指し示すものが char なら、なんでもかまわんのです。

3.後、変なのは、scanf("%s", combine)です。bufferと結びついていません。
このままだとキー入力してcombineに文字列を格納するのですが、これは思うように動作しない定番です(scanfはストリーム以外、通常使わ(え)ないのです)。

あなたがかいているとうり、combineにすべての単語が含まれたテキストであるなら
sscanf(combine,"%s",buffer)
になると思います。ただし、最近、離れていますので、文字の区切りや終端の検討はして下さい。
    • good
    • 0

なぜ、


char word[256];
ではなく
char word[256][256];
なのかな?

この回答への補足

早い解答ありがとうございます。

wordの最初の四角括弧は実際に出てくる英単語の文字数分入るスペースを作って、
二つ目の四角括弧は単語それぞれを格納しようと思って二つ作りました。

補足日時:2005/07/25 21:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!