- ベストアンサー
[動的配列]C言語の勉強で簡単な単語帳プログラム
- C言語の勉強で作成した簡単な単語帳プログラムについて質問です。
- プログラムはテキストファイルからユーザが入力した単語を検索し、ヒットした単語と説明を表示します。
- 次に、ループごとに配列の要素数を動的に確保するためにどのタイミングでmallocやreallocを使うべきかわかりません。また、プログラムの欠点も教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>やはりできないのですかね?(^_^;) meanを読み込む前にmeanのサイズを取得する方法がないと…無理でしょうね。 あるいは…1文字(1バイト)ずつ読み込んで、改行位置に到達しなかったらrealloc()で拡張して、さらに1文字(1バイト)読み込む…とか。 realloc()自体は1バイト単位でやる必要は無いかも知れませんけどね。 # そこらヘンは http://okwave.jp/qa/q6961996.html 辺りでも話題になってますが。 >要するにヒットしたらすぐに抜け出す方が効率がいいということですかね? >テキストファイルのインデックスは重複しないように作成するつもりです。 仕様次第…です。 man (成人の)男,男子 man [無冠詞で総称的に] (女と対比して)男 man オンラインリファレンスマニュアルのインターフェース とか、複数の意味があるものを無視するかどうか…でしょう。 最初にヒットしものだけ。重複はない。というのであれば、ヒットした時に読み込みループを抜けた方が動作としては軽い…かと。 >strcmpする前にワンクッションおいて大文字小文字を区別しないような動作を入れるといいということでしょうか? stricmp()を使う。なんて方法もあります。 input[]に入るのが、ASCIIの場合に限るかも知れませんけど。 # shift-jisが入った場合にstricmp()が正しく動作するかは…ライブラリ次第でしょうな。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
>配列(mean)の要素数を動的に確保するということを >しようと思うのですがどのタイミングでmallocやreallocを入れればよいのか >いまいちよくわかりません。 もちろん、実際に読み込む前です。 が、読み込んでみないと長さが判らないので…どうにも出来なさそうですが……。 >また、このプログラムの欠点などありましたら教えていただけると助かります。 お約束ですが、バッファオーバーフローの可能性は残ったまま…でしょう。 input[]とtango[]でサイズが違う。という意図も不明ですが。 input[]に入力したデータがtango.txtの先頭にあったとしても、最後まで読み込みを継続している…とか。 # まぁ、最後まで読んでいるのでtango.txtに同一の単語があった場合に全て表示することになりますが。 strcmp()を使用しているため、例のパターンだと"Apple"はヒットしない…とか。
お礼
>どうにも出来なさそうですが……。 やはりできないのですかね?(^_^;) >input[]とtango[]でサイズが違う。という意図も不明ですが。 ソースをここにペーストしたときに自分も気づきました(笑) とりあえずそのまま張り付けた方がいいと思い修正しませんでした。 直しておきます。 >input[]に入力したデータがtango.txtの先頭にあったとしても、最後まで読み込みを継続している…とか。 要するにヒットしたらすぐに抜け出す方が効率がいいということですかね? >まぁ、最後まで読んでいるのでtango.txtに同一の単語があった場合に全て表示することになりますが。 検索するのはスペース前のインデックス(tango)だけなのでmeanの方で重複しても関係ないので気にしていませんでした。 テキストファイルのインデックスは重複しないように作成するつもりです。 >例のパターンだと"Apple"はヒットしない…とか。 strcmpする前にワンクッションおいて大文字小文字を区別しないような動作を入れるといいということでしょうか?
お礼
前回のアドバイスをいただいてからさっそくstricmp()使っているのですが、 文字コードのことまではまったく考えていませんでした。 というか、文字コード自体についてほとんど理解していないのでそこから 勉強する必要がありそうです(笑) >最初にヒットしものだけ。重複はない。というのであれば、ヒットした時に読み込みループを抜けた方が動作としては軽い…かと。 もう少し検討してみます!