• ベストアンサー

文字列探索アルゴリズム(Aho Corasick法)をC言語で組みたい

はじめまして。 標題のとおり、 文字列探索アルゴリズム(Aho Corasick法)をC言語で組みたいと考えています。 簡単なコード例か、どこか情報元はありませんでしょうか? 文字列「あかさたなはまやらわ」から キーワード「あか」・「たな」を探して 出力として、 「あか」…インデックス0 「たな」…インデックス3 となるようなイメージのプログラミングです。 詳しい方がおりましたら、何卒ご教授お願い致します。

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

有名なので検索するといっぱい出てきます。探せば色々な言語で実装したものや、論文や書籍などの解説も見付かります。 とりあえずぱっと見まとまってそうなサイト、 http://d.hatena.ne.jp/naoya/20090405 最初はスクリプトで組むというのは楽でいいです。そのあとCに書き起こしてチューニングとかはありです。

goopon
質問者

お礼

回答ありがとうございます。 スクリプトは使ったことがありませんが、試してみたいと思います。

関連するQ&A

  • 文字列の探索アルゴリズムについて

    松井勝正といいます。自分なりのアイディアで文字列の探索アルゴリズム を作成したのですが。質問が2点程あります。 1点目:既に世に出回っているアルゴリズムかご教授願えれば幸いです。 2点目:改良の余地やバグ等ございましたらご指摘いただければ幸いです。 それではよろしくお願いいたします。

  • C言語でファイルからの文字列抽出について

    C言語でファイルからの文字列抽出について INPUTファイルからキーワードを探し、キーワードがあった行をOUTPUTファイルに出力したいのですが、どうしたら良いかわかりません。 //一行ずつ読み込む while(fgets(buf,sizeof(buf),fp)!=NULL){ //文字列からキーワードを探す //キーワードがある一行をOUTPUTファイルに出力 } こんな感じになると思うのですが、どういうコードを書いたら良いかわかりません。 分かる方いらっしゃいましたらご回答宜しくお願いします。

  • C言語のアルゴリズムについて

    C言語で「標準入力から英語の文章を読み込んで,文字列Ilmorが出現した行をその行番号とともに表示するプログラムを作りなさい.」とプログラムを作りたいのですが、文字列を発見するところまでは分かるのですが、その行どうやって表示すればいいのか分かりません。また、文章を読み込むのもすごくややこしく最後にエンターを二回押すなどの制限があります。(scanf) 参考になるプログラムを書いていただける方いませんか?できればC言語のアルゴリズムについて詳しく書いた本やサイトがあれば教えていただきたいです。 レベルは超入門的な本を2,3冊読んだ程度です。アルゴリズムなどにはまったく触れてなかったし、ライブラリー関数も少ししか載ってなかったので関数の本もあれば教えていただきたいです。

  • C言語で文字列操作のアルゴリズム

    C++言語で char s[] = "AAABBBCCCDDDEEE"; という文字列があり、 3バイト毎、取り出して前に*をつけ *AAA s=[BBBCCCDDDEEE] *BBB s=[CCCDDDEEE] *CCC s=[DDDEEE] *DDD s=[DDD] *EEE s=[] のように表示させるプログラムで、 最後だけは3文字とは限らない場合も考慮した 最終的にsが空になるアルゴリズムを考えていますが 何か良い方法はありますか? 例)最後が3文字でない場合 *EE s=[] 2文字でした。

  • C言語の文字列について教えてください。

    2つの文字列を入力後、それらを比較して、前者の文字列の中から後者の文字列に該当する箇所を削除するコードはどうなるのでしょうか? たとえば、前者の文字列が"abacbat"で、後者の文字列が"bac"だった場合、前者の"bac"の部分が削除されて、"abat"と出力されるようにしたいのです。

  • アルゴリズムの問題-文字列探索

    基本情報技術者の勉強をしているのですが、午後の問題のアルゴリズム(文字列探索)でつまっています。 どなたか、アドバイスいただけますでしょうか? 以下、長くなってしまって申し訳ないです。 複数行の文字列からなるファイルの各行を、与えられた検索文字列で検索し、見つかった場合に、その行番号と開始位置を印字します。 例:検索文字列 YA   ファイル内容    MINATOKU TORANOMON    CHIYODAKU KASUMIGASEKI    SHIBUYAKU SHIBUYA 印字結果 行番号-3 開始位置-6 行番号-3 開始位置-16 【宣言部は省略してあります】 ・ファイルを開く ・LN←0 ・R()←検索文字列 ・RN←文字数 ・レコード入力(ファイル,M(),sts) ■sts=0 │・MN←ファイルの文字列の文字列長 │・LN←LN+1 │・K←1 │■K<=MN-RN+1 ││・L←1 ││■M(K+L-1)=R(L)かつL<=RN │││・L←L+1 ││■ ││▲L>RN │││・LNとKを印字  ・・・・ここが分かりません ││▼ │■ │・レコード入力(ファイル,M(),sts) ■ ・ファイルを閉じる Kに数値を格納する記述が見当たりません。 Kをカウントアップするか、数値を代入する必要があると思うのですが、どうなのでしょうか? ※問題の量が多いので、省略している部分もあります。質問内容が分からなかったら、補足要求してください。 よろしくお願いいたします。

  • c言語の文字列出力

    プログラミング超初心者です サイトで文字列の出力について調べていたところ c言語は変数に文字列を代入することができないのでstrcpy関数を使い以下のようにするとあります char s[5]; strcpy(s, "ABCDE"); printf("%s\n", s); ところが他のサイトでは以下のように説明しています char s[5] = "ABCDE"; printf("%s\n", s); 明らかに後者の方が簡単で良いように見えるのですが違いはなんですか? あと、文字列の配列の指定?の[5]の部分なのですが 数字を記載しているところがほとんどですが省略しているところも有ります どんな文字列が入るかわからない場合もありますがここは省略しない方が良いのですか? よろしくお願いします

  • 文字列の圧縮・復元アルゴリズムで困っています

    昔専門学校でやったけれど完全に忘れてしまっている文字列圧縮・復元の アルゴリズムについて教えて頂きたいのです。 仕様としては文字列「AAAABBBCCDDDDDEF」と並んでいた場合に圧縮を 実行すると「A4B3C2D5EF」と文字列を圧縮し、復元の場合はこの文字列を元に 圧縮前の文字列「AAAABBBCCDDDDDEF」にするといった感じのものです。 C言語かC#言語で答えて頂けるとありがたいです。

  • C言語で16進数の文字コードを文字列に変換

    16進の文字コードを入力してそれに対応する文字列を出力したいのですが 文字列から16進コードに変換出来ても16進コードから文字列に変換することが出来ません。 参考になるコードかサイト、または何かヒントがございましたらよろしくお願い致します。

  • ある夫婦3組が2人乗りのボートで対岸に渡るという縦型探索アルゴリズムを

    ある夫婦3組が2人乗りのボートで対岸に渡るという縦型探索アルゴリズムをC言語でプログラミングしたいのですが、どのようなプログラミングをすればよいのでしょうか? ルールは、 1、夫婦の妻は一人では対岸に渡ることができない。(一人で戻るのは可能) 2、妻は、自分の旦那以外とは一緒に渡れない です。 縦型探索なので、OpenListやClosedListを使うのですが、わかりません。 回答でもヒントでもよいのでよろしくお願いします。 またなにか、わからないことやくわしいことが聞きたいなどもどんどんかきこんでください。 お願いします。

専門家に質問してみよう