文字列照合アルゴリズムの最初の投稿 - マッチ暴力

文字列のマッチングが重要な要素、我々は完全一致について話している部門の文字列マッチングで、それは親の文字列の部分文字列マッチング位置を見つけること、です。

たとえば、次のように文字列の親:EDGRNGIGEDEDGEDGLGDEDG、サブ:EDG;私たちは、親の「EDG」の文字列の位置を知る必要があります。コードの最初に:

1  // 文字列マッチングアルゴリズム完了ブルートフォース方法を使用して
2位に含む" のiostream " 
。3の#include " 文字列" 
。4の#include " ベクター" 
。5  使用して 名前空間STDを、
 図6のベクトル< INT >&BFmatch(文字&、文字列&、ベクター< INT >&);
 7  ボイド showpos(ベクトル< INT >&);
 8  int型のmain()
 9  {
 10      ModelStr、SonStr。
11      ベクトル< INT > POS;
 12である      COUTは<< " 一致する文字列を入力してください" ;
 13は、      CIN >> ModelStr;
 14      COUT << ENDL;
 15      COUT << " サブストリングを入力してください" ;
 16      CIN >> SonStr;
 17      COUT << ENDL;
 18であり     ; BFmatch(ModelStr、SonStr、POS)
 。19      showpos(POS)
 20は      システム(" PAUSE " );
 21である }
 22であるベクトル<int型>&BFmatch(文字列&ModelStr、文字列&SonStr、ベクトル< INT >&POS)
 23  {
 24      のためのint型 I = 0 ; iが++; iがModelStr.size()< 25      {
 26          のint = K 0 27          のためにint型 J =であり; kは<SonStr.size(); J ++、K ++ 28          {
 29              であれば(SonStr [K] == ModelStr [J])
 30                  続けます31              
32                  ブレーク33         }
 34          もし(K == SonStr.size())
 35              pos.push_back(I)。
36      }
 37台の     リターンPOS。
38  }
 39  空隙 ShowPos(ベクトル< INT >&POS)
 40  {
 41      であれば(pos.size()!= 0 42      {
 43          COUT << " MatchingStrの最初の位置:" 44          のためにint型 I = 0を私は++; iが(pos.sizeを<) 45          {
46              coutの<< POS [I] << " \ tの" ;
47          }
 48          COUT << ENDL。
49      }
 50      他の
51          coutの<< " !いいえ、そのような文字列" << てendl;
52 }

なお:機能BFmatchベクトルの戻り型が<整数>と、戻り型が基準型です。私たちは、ベクトル<整数>への復帰がある理由を理解&と入力する必要がありますか?

        我々は明確にする必要があり、このです:関数の戻り値の型がある:関数の戻り値の型!この文は非常に重要です。戻り値は、パラメータ・タイプのPOS変数が内部渡される変数POSであり、POS型パラメータはベクトル<整数>&あります。なぜここにベクトル<整数>&タイプ、あなたは我々の意図は試合のベクトルの保管場所、大きなスペースを返すことです、スペースがお金を保存しない価値の移転の方法により、このような方法で保存することができることを考えることを言うかもしれません。それの他の説明はありませんか?

        確かに、我々はスペースを節約するために、これを考慮していないと仮定します。でもPOS変数を渡し、関数がローカル変数を返してみましょう、ローカル変数は、最終的に可能どのもちろんのも、主な機能をPOSに割り当てられますが、この1つは、より重要なのは、スペースのオーバーヘッドをもたらすだけでなく、プログラムではありませんデザイン。

         内部のデザインがある:関数名やパラメータ、ビューの機能とインタフェースの観点から、我々は含める:プログラムの名前、入力インタフェース、出力インタフェースをこれは、(それは、私たちの出力である)私たちは、各関数の値を返すようにしたいものです直接関数本体の上昇に反映されています。(OpenCVのライブラリでは、このアプローチの広範な使用)。つまり:関数名、入力端子と出力端子の機能は、式のより科学的な方法を記述することです。そして、私たちは自然に存在する範囲でのみ機能ローカル変数、ローカル変数を使用することはできません、共通のインターフェースとして、出力端子が欲しいです。したがって、我々は、参照の使用が道を通過しながら共通のインターフェースを実装することで、出力端子を定義するための共通インターフェース方法の使用を必要とする(もちろん他の方法があります)。

         そのため、その後のプログラムの設計では、プログラミングを見て、関数名、入力インターフェース、出力インターフェース方法を検討し、抽象化のより高度な方法です。

 

おすすめ

転載: www.cnblogs.com/shaonianpi/p/11403960.html