学校のレポートである一文の中から相異なる単語の出現頻度を求めよ。 と言う課題がでたのですが、コンパイルをしたらエラーがでます。いろいろいじったのですがやっぱりできません。力を貸して下さい。
下のはプログラムのわからない箇所の中見です。
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);
}
No.4ベストアンサー
- 回答日時:
他の方の回答でOKなのだと思いますが、それとは別に初期化の部分で……
for(i = 0; i < 256; i++){
number[i].count = 0;
number[i].word[0] = '\0'; /* ← この部分 */
}
が必要かなと思います。
No.3
- 回答日時:
あと、注意を忘れましたが combineはプログラムのつくりから変数になりますので定数にしないで下さい。
char combine[2000]; などとしないで。
No.2
- 回答日時:
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)
になると思います。ただし、最近、離れていますので、文字の区切りや終端の検討はして下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- C言語・C++・C# C言語 3 2022/11/09 13:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
TCP/IP通信型大文字・小文字変...
-
c++ 文字列を入力して、一文字...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
Visual Studio strcpyについて
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
int main()の・・・
-
double型の値をchar配列に変換...
-
switch文で文字を比較すること...
-
DPマッチング
-
int型からchar型への変換
-
文字列から空白を取り除きたい...
-
バイナリファイルをコピーする...
-
c言語でユーザ関数を利用して入...
-
C言語のポインターで詰まっている
-
C++ の FileCopy の設定が解り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報