C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

ベクトルを使用して文字列照合を実装するC++プログラム


これは別の文字列照合方法です。このアプローチでは、ベクトルを使用して部分文字列を検索しています。

C ++では、標準ライブラリを使用して簡単にベクトルを作成できます。メイン文字列と検索される文字列をベクトルとして取得し、それをメイン文字列に検索します。一致するものが1つ見つかると、関数はアドレスを返し、メイン文字列から削除します。したがって、次の反復では、位置0から開始して、再度検索します。

複数回発生する場合は、ループを使用して一致するものを繰り返し検索し、位置を返します。

Input: Main String: “ABAAABCDBBABCDDEBCABC”, Pattern “ABC”
Output: Pattern found at position: 4
Pattern found at position: 10
Pattern found at position: 18

アルゴリズム

vector_pattern_search(main、substr)

入力 −メインテキストとサブストリング。

出力 −パターンが見つかった場所

Begin
   p := starting point of the main string
   while r is not at the end of substr and p is not at the end of main, do
      r := starting of substr
      while item at position p & r are not same, and p in main, do
         p := p + 1
         i := i + 1
      done
      q := p
      while item at pos p & r are same, and r in substr and p in main, do
         p := p + 1
         i := i + 1
         r := r + 1
      done
      if r exceeds the substr, then
         delete first occurrence of substr from main
         return the position where substr is found

      if p exceeds main string, then
         return 0
         q := q + 1
         p := q
   done
End

サンプルコード

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void take_string(vector<char> &string){
   char c;
   while(true){
      c = getchar();
      if(c == '\n'){
         break;
      }
      string.push_back(c);
   }
}

void display(vector<char> string){
   for(int i = 0; i<string.size(); i++){
      cout << string[i];
   }
}

int match_string(vector<char>& main, vector<char> substr){
   vector<char>::iterator p,q, r;
   int i = 0;

   p = main.begin();

   while (r <= substr.end() && p <= main.end()){
      r = substr.begin();
      while (*p != *r && p < main.end()){
         p++;
         i++;
      }
      q = p;

      while (*p == *r && r <= substr.end() && p<=main.end()){
         p++;
         i++;
         r++;
      }

      if (r >= substr.end()){
         main.erase(main.begin(), q + 1);
         return (i - substr.size() + 1);
      }

      if (p >= main.end())
         return 0;
         p = ++q;
   }
}

出力

Enter main String: C++ is programming language. It is object oriented language
Enter substring to find: language

Match found at Position = 20
Match found at Position = 52

  1. 配列を使用してスタックを実装するC++プログラム

    スタックは、要素のコレクションを含む抽象的なデータ構造です。スタックはLIFOメカニズムを実装します。つまり、最後にプッシュされた要素が最初にポップアウトされます。スタック内の主要な操作のいくつかは-です。 プッシュ-これにより、データ値がスタックの最上位に追加されます。 ポップ-これにより、スタックの最上位のデータ値が削除されます ピーク-これはスタックの最上位のデータ値を返します 配列を使用してスタックを実装するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int stack[100]

  2. 再帰を使用して文を反転するC++プログラム

    文字列は、ヌル文字で終了する1次元の文字配列です。文字列の逆は、逆の順序で同じ文字列です。たとえば。 Original String: Apple is red Reversed String: der si elppA 再帰を使用して文字列の形式で文を反転するプログラムは次のとおりです。 例 #include <iostream> using namespace std; void reverse(char *str) {    if(*str == '\0')    return;    else {