- ベストアンサー
検索機能の実装について
- データ管理プログラムの検索機能についての質問です。コンパイルしても該当項目が表示されない場合の修正方法と、大文字小文字区別なし・完全一致で一覧表示する方法を教えてください。
- "const"の意味が分からないため、説明していただけると助かります。
- 質問文章の構造体定義と検索機能の関数のコードも添付しています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> 1) これは学校の課題なんですけど、関数内で入力を促すのは、検索機能を関数として実装しなければならないからです。 コンソールから入力するのなら、引数で与える必要がなくなります。 > 2) 確かにこれでは無視していることになってしまいますね…。ではmain関数でどのような値を呼び出せば上手くいくのですか? mainで検索文字列の入力を促し、それを関数に引き渡します。
その他の回答 (5)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> "const"とはどのような役割を果たすのか教えていただけないでしょうか。 constとは"書き換えない/変更しない"という意味。 なので const char * は"この関数は、与えられた文字列を書き換えません"という呼び出し側との約束となります。 なので、関数内で書き換えているのは約束違反です。 # 詳しくはしかるべき参考書を読んでください。
お礼
いろいろな参考書を読んでみます。いろいろとありがとうございました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> ただ、空白までは目的の検索文字列になっていました。 ではその(空白までの)文字列と"完全に一致するアーチスト"は登録されているのですね? そうでないと見つからないのは当然です。
補足
はい、ちゃんと登録されています。 一応、登録、一覧表示、セーブ、ロードは出来るようになっていて、ロードしたものを一覧表示するときちんと出てきます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
空白を含む文字列を scanf("%s",search_string)で入力していませんか? 入力の直後に printf("[%s]を探します\n", search_string); を追加して確認してください。 表示されたのは目的の検索文字列ですか?
補足
空白は認識しませんでした。そこはミスということですよね。 ただ、空白までは目的の検索文字列になっていました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 3) ... const char *search_string:検索文字列 なのに何故、関数内で入力を促すのですか? 呼び出すときのbufには何が入っているのですか? その値(文字列)を無視していいのですか?
補足
1) これは学校の課題なんですけど、関数内で入力を促すのは、検索機能を関数として実装しなければならないからです。 2) 確かにこれでは無視していることになってしまいますね…。ではmain関数でどのような値を呼び出せば上手くいくのですか?また新たに別の文字列を宣言しておけば良いのですか?初心者なのでご質問にきちんと答えれていないかもしれませんがご教授よろしくお願いします。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
-「該当項目が表示されません」とありますが、何が表示されますか? - この関数search_recordは何をしてくれるか、理解していますか? - 引数それぞれの意味は? - これをどのように呼び出していますか? - これを呼び出すとき、検索対象であるMusには正しく値が納められていますか? current_numの値は正しいですか?
補足
説明不足ですみません。 1) 表示されるのは”No applicable items!”です。 2) 自分としては、入力した文字列と一致したものを表示するという形にしているつもりではいるんですが…。 3) Music *mus:構造体配列の先頭アドレス int current_num:現在の登録レコード数 const char *search_string:検索文字列 4) search_record(musiclist, num_record, buf); musiclistはmain関数でMusic musiclistという風に配列を決めました。 num_recordはmain関数でのレコード数を表します。 bufはmain関数でchar型で宣言しています。 5) musには正しく納められています。current_numの値も正しいです。 これ以外の機能(登録、一覧表示、セーブ、ロード)では実行できていました。
お礼
分かりました。これを参考にもう一度やってみます。ご教授ありがとうございました!あと1つ質問なんですけど、"const"とはどのような役割を果たすのか教えていただけないでしょうか。