• ベストアンサー

初心者なんですが、モジュールが良くわからなくて,,,

c言語で文字列のハッシュモジュールを作ることになったんですが、そもそもモジュールの知識がほぼないのでどう書けばいいか、よくわかりません。 例えば、文字列の配列が渡されてハッシュを作るのですが、そもそもそこらへんの渡し方をどのように書けばいいのかもわかりません。誰かわかりやすく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

ANo.1 = Interestです。 > ファイル内の文字列をハッシュモジュールでハッシュテーブルに格納するという > モジュールを作って、mainのほうで検索をかけて、マッチしたらそこの文字列の > 情報を引っ張ってくるということをやろうと考えています。 ハッシュのお勉強目的ではないのなら、C++の標準ライブラリにあるmapクラスを使うと楽ですね。 ご要望の処理を実現してくれます。このmapは、ずばりハッシュテーブルです。文字列は char配列ではなく、stringを使います。 例えば、こんな感じで使います。 map<strig, int> mymap; mymap.insert( map<string, int>::value_type("hoge", 1) ); // ハッシュテーブルに登録する cout << mymap["hoge"] << "\n"; // ハッシュテーブルから "hoge" に相当する値を参照する < > でくくられた部分はC++の「テンプレート」という機能を使っており、プログラム開発者が自分の使いたい型を指定できるようになっています。 自分でハッシュ関数を作るところからやっているとバグまで一緒に作ってしまうので(汗)、標準ライブラリを使ったほうが信頼性の高いものになると思います。 キーワード: STL, 標準テンプレートライブラリ, map, 連想配列

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

回答No.6

ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.7

ですね。標準C++には各コンテナの実装については何も規定してはいませんが、 仕様および時間計算量に対する要請からして少なくともハッシュではありません。 C++0X/IR1で新たに標準となった unordered_set/multiset/map/multimap が ハッシュによるコンテナです。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

厳密にいえば binary tree とは限らないけど事実上 binary tree, でしたっけ>#4.

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

No.3> このmapは、ずばりハッシュテーブルです。 違います。binary-treeです。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「そこらへんの渡し方」はモジュールのインターフェースの一部だから, 「上の人が決めたものがある」か「あなたが使う人と一緒になって決めた」かのどちらかのはず. そもそも「ハッシュモジュールで何をするのか」は理解されてますか?

yxia001
質問者

補足

一応、わかっているつもりです。ファイル内の文字列をハッシュモジュールでハッシュテーブルに格納するという、モジュールを作って、mainのほうで検索をかけて、マッチしたらそこの文字列の情報を引っ張ってくるということをやろうと考えています。というかmain関数も自分が書くのですが。 今回はモジュールを作ってみようということでやり始めたんですが、肝心のモジュールについてほ素人同然だったので、今勉強しているのですが、なかなか理解が追いつかず詰まっている状態です。

全文を見る
すると、全ての回答が全文表示されます。
  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

モジュールをどういう単位で考えているかわかりませんが、例えば関数を作れということでしたら、こんな感じでどうでしょうか。 /**  名称: get_hash_code  概要: 文字列からハッシュコードを作成する。  引数: *key ハッシュキーとなる文字列へのポインタ  戻り値: 0 <= ハッシュコード      0 > エラーコード */ int get_hash_code(char *key) {  if( NULL == key )   return -1;  /* 以下、ハッシュキーからハッシュコードを作る処理を書いてください。*/ } > 例えば、文字列の配列が渡されてハッシュを作るのですが、 > そもそもそこらへんの渡し方をどのように書けばいいのかもわかりません。 上記の例を使えば、下記のように文字列を関数に渡すことができます。 char *key = "hogehoge"; int code = get_hash_code( key );

yxia001
質問者

補足

アドバイス有難う御座います。なるほど、このように書くのですか。 僕がすることは、main関数で読み込んだファイル(およそ10万件)の文字列をハッシュにするために使うモジュールを作らなければならないんです。 これを参考にして、まずがんばってみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • トリガー内でperlモジュールを呼び出したい!

    mysql5.0.27で、テーブルにinsertしたデータ(文字列)をperlモジュールで変換し、変換後の文字列を別のテーブルにinsertしたいのですが、方法がわかりません。 perlを使いたいのは、すでにモジュールがあるということと、他の言語では文字列変換が面倒という理由です。 perlが呼び出せないのなら、Cとかで作り直してもいいのですが、まずはperlの呼び出し方を教えてください。それができなければ、Cでも構いません。 できそう/できないだけでもご存知でしたら教えてください。

  • 誰かc言語でのハッシュの作り方教えてください

    c言語でハッシュのモジュールをつくらねければならないんですが、そもそもハッシュというものがサイトを見てもうまく理解できないんです。誰か、理解しやすく教えてくれませんか?

  • スタックモジュール

    「スタックモジュール」を作ることを考える。データ構造の定義と、以下の操作の定義を書け。ただしC言語を使え。 create 空のスタックを作る push スタックにデータを一つ挿入 pop スタックトップのデータを返すとともに、そのデータをスタックから削除 という問題です。 私は、C言語でのスタック構造は配列でしか扱ったことがなく、「スタックモジュール」の意味がよくわかりません。スタック構造はFILOのデータ構造ですが、これをC言語で書こうとすると配列を宣言して終わってしまう気がします。 create・push・popは、int (&num){......}のように普通に関数を宣言すればよいのでしょうか。 どなたか教えてください。

  • 文字列をハッシュにしなければならないのですが

    C言語にさ ファイルの中にある、3バイトunicodeの漢字文字列郡をハッシュテーブルに格納してハッシュを作りたいんですが、取っ掛かりすらつかない状況です。 とりあえず、配列から3バイトの16進数にして、後はその文字列分の16進数を足して、それを割ってキーをつくりテーブルにいれる、としようとしています。 配列から3バイトの16進数にする int joint(char a, char b, char c){ int join = 0; join = a<<8; join = (0x0000FF00 & join) + (0x000000FF & b); join = join<<8; join = (0x00FFFF00 & join) + (0x000000FF & c); return join; } このように16進数にするのですが、最初の取っ掛かりとしてのハッシュについては、どうやったらハッシュテーブルに格納でくるのかいまいちわからないのです。誰かわかりやすく教えてください。

  • c言語でハッシュを作るらしいのですが...

    c言語でハッシュを作るんですが、勉強不足のためいまいち理解が追いついていないのが現状です。昔の字体を、今の字体に変換するために下記の記述のあるファイル読み込むんですが、この2,3列目が昔の字体で、この文字があったら1列目の今の字体へのポインタを返すように配列に入れたいんです。誰かやり方をおしえてくれませんか?、 没,沒,歿 壱,壹,弌 奇,竒,綺 協,恊,叶

  • モジュール関連図・モジュール仕様書について

    仕事で運用中のシステムのモジュール関連図・モジュール仕様書を作成することになりました。 しかし、モジュール関連図・モジュール仕様書というのがどういうものを作成すればいいのかわかりません。 (文章で説明しているサイトはありましたが、文字だといまいちイメージができませんでした) なにか、見本となるサイトなどがありましたら、教えてください。 (VB言語向けのがあると助かります。)

  • C初心者です。配列に文字列を代入の仕方

    C言語の初心者です。質問なのですが、 配列の、ある位置に文字列を加える時はどうしたら言いのでしょうか? char str[100]; str[10]から文字列 "ABCDE"というのを加えたいのです。 自分が考えられるのは str[10] = 'A'; str[11] = 'B'; str[12] = 'C'; str[13] = 'D'; str[14] = 'E'; と入れていく方法しか思いつきません。 他にもっと見やすい方法等御座いませんでしょうか? 宜しくお願いします。

  • 文字列の操作

    はじめまして。 C言語のポインタを使った操作のように JavaScriptでも文字列の一文字一文字を配列に格納していくことはできますか? よろしくお願いします。

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • Apacheモジュール化

    C言語で作成したCGIを負荷軽減のためにApacheモジュール化したいのですが、英文のHPばかりで、さっぱりわかりません。 どなた様か教えていただけないでしょうか? 宜しくお願いします。