• ベストアンサー

文字列から文字列を検索するプログラム

現在、C言語を学習しています。 文字列から文字列を検索する関数に「strstr]がありますが、自作関数として自分で作成する方法を考えております。 文字列から文字を検索する事は出来たのですが、文字列を検索するシーケンスがわかりません。 有識者の方、御教授よろしく御願い致します。

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

  • ベストアンサー
回答No.2

やり方はいくつもありますが、オーソドックスなのは: "m文字からなる文字列 source" から "n文字からなる文字列 target" を探す---- 1. int pos = 0; 2. source[pos]を起点として、文字target[0]と一致するsource[t]を探す。なければ終わり。 3. (2)で得られた位置 t からn文字がtargetと一致すれば発見(終わり) 4. pos = t+1 として(2)に戻る。

5502k
質問者

お礼

御回答ありがとうございました。 手順を踏んで説明して頂きわかりやすかったです。

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

その他の回答 (2)

回答No.3

補足。 > ANo.1: 文字列検索の定番アルゴリズムとして「BM法」と呼ばれる物があります。 BM法は検索する文字列がそこそこ長くないと面倒な割に速くない。

全文を見る
すると、全ての回答が全文表示されます。
  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.1

文字列検索の定番アルゴリズムとして「BM法」と呼ばれる物があります。かなり有名で、基本情報処理試験(旧2種)などでも出題されたりしています。 BM法については、色々情報が公開されているので、調べてみてください。

5502k
質問者

お礼

御回答ありがとうございました。 文字列検索の定番として「BM法」というものがあるんですね。 これから調べてみます。

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

関連するQ&A

  • 【C言語】大文字小文字に関わらず文字列を検索したい

    C言語で文字列を検索処理があるものですが、 以下のようなことがうまくできず困っています。 1.検索対象はファイルから読み込んだメモリ内の文字列。 2.対象の文字列は大文字小文字に関わらずに抽出する。 例えば、「abc」を検索するとして、文字列内が aaaaBccccdefgだとすると… aaa「aBc」cccdefg かっこ内を検索します。 strstrだと、完全な一致しかヒットしないので… 長い文字列が対象になることもあるので、 すべての組み合わせを見るのも性能的に難しいです。 何か方法ご存知の方いらっしゃいましたら、よろしくお願いします。

  • 文字列の操作について

    C言語での文字列検索についてご教授ください。 文字列: C:\test\test.txt 上記の文字列から"C:\test"を切り抜きたいのですが どのように行えばいいでしょうか。 宜しく御願い致します。

  • あったらいいなと思う、C文字列ライブラリ関数

    みなさんC言語で開発してきた中で、ライブラリとして用意されてたら いいなと思った事のある関数・処理としてどのようなものがありますでしょうか。 特定業務向けの話でなく、汎用的な処理ででも結構です。 例えば、いつも思うのが、なんで文字列A中の文字列Bを、文字列Cに置換する 関数ってなんでないんだろう、などですかね。 (そりゃstrstr、strcatなど既存ライブラリ関数を使いまわせば書けますが...)

  • C言語 strstr()に似た関数は?

    C言語で、strstr()は、文字列内の先頭か指定文字列を検索しますが、 文字列内の最後尾から指定文字列を検索する関数はありませんか?

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

  • ページ内の文字列を検索

    初心者ですが、質問させてください。 ページ内の文字列を検索できるように検索ボックスを付け、 見つけた文字のところへジャンプするようにと考えています。 (ブラウザの機能にある検索のようなもの) Javaで作成したいのですが、できるでしょうか? どなたかご教授頂けないでしょうか? 申し訳ありませんが、よろしくお願い致します。

  • ワイルドカードを用いた文字列検索

    皆様こんにちは、 Windows2000+VC6にてワイルドカード(*,?)での文字列比較を 作成したいのですが、そういう関数は無いのですね。 比較対象文字列には2バイト文字も含まれており、*,?自身も 比較できないといけません。 なにか良い方法や、サンプルを教えて頂ければありがたいです。 VBではLIKEで一発だったと思うのに..... VBからCに入ると戸惑うことがいっぱいですね。 よろしくお願い致します。

  • 文字列ファイル表示プログラム

    Cプログラムの問題なのですが、 「複数の文字からなるファイルを読み込み、全て読み込んだ後に表示するプログラムを作成したいと思います。あらかじめ文字列を配列として宣言するのではなく、文字列の長さを確認した上で、malloc()標準関数でメモリを割り当て、表示しなさい」 文字列を宣言せずに、どうやったらファイルの中の文字列を読み込むことができるのでしょうか?その上、文字列の長さを確認したあとmalloc関数を使うにはどうすればいいのでしょうか。 どなたか教えてください。お願い致します。

  • 任意の文字列を検索して文字を追加する。

    マクロについてご質問します。 宜しくお願い致します。 <質問> A列…すべてのデータが入っています。 B列…検索したいデータが入っています。 C列…検索結果のデータを出力します。 過去に教わったIF関数を使用した「=IF(ISNA(MATCHを組み合わせた式)」方法ですとA列の文字とB列の文字が一致しているものは そのままC列に表示で、B列に含まれないA列の文字はC列に"その他"として出力することができました。 今回は、A列の文字とB列の文字が一致している場合は C列に文字を加え、A列B列ともに一致していない場合は そのままの表示を行いたいのですがどなたかご助言していただけると助かります。 A列   B列  C列 ------------------------ 赤   白   赤   白   緑   白組 黄       黄 緑       緑組 青       青 IF関数で行うことは可能なのでしょうか? 宜しくお願い致します。

  • 文字列操作:¥ を ¥¥ に置き換える方法を知りたいです。

    文字列操作:¥ を ¥¥ に置き換える方法を知りたいです。 プログラミング 初心者です。 例えば、CString strFimeName ; が、C:¥test¥a.txtの時、この文字列を C:¥¥test¥¥a.txt にしたいです。(¥は全角ですが正しくは半角です) strstr関数を使う、という解説をwebで見たのですが、うまくいきません。よろしくお願いします。

このQ&Aのポイント
  • 筆まめ24→32アップグレード乗り換え版をダウンロード中で固まってしまい、進行できません。
  • 質問者はWindows 10 Home(Windows 8からのアップグレード)を使用しています。
  • ソースネクスト株式会社の製品・サービスに関する質問です。
回答を見る

専門家に質問してみよう