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

C++で1つの文字列が他の文字列に出現するすべてのインデックスを検索します


文字列strと別の部分文字列sub_strがあるとすると、str内のsub_strのすべての出現のインデックスを見つける必要があります。 strが「aabbababaabbbabbaaabba」で、sub_strが「abb」であるとすると、インデックスは1 91318になります。

この問題を解決するために、C ++ STLでsubstr()関数を使用できます。この関数は、チェックを開始する場所から初期位置を取得し、部分文字列の長さがsub_strと同じである場合は、その位置を返します。

#include<iostream>
using namespace std;
void substrPosition(string str, string sub_str) {
   bool flag = false;
   for (int i = 0; i < str.length(); i++) {
      if (str.substr(i, sub_str.length()) == sub_str) {
         cout << i << " ";
         flag = true;
      }
   }
   if (flag == false)
      cout << "NONE";
}
int main() {
   string str = "aabbababaabbbabbaaabba";
   string sub_str = "abb";
   cout << "Substrings are present at: ";
   substrPosition(str, sub_str);
}

出力

Substrings are present at: 1 9 13 18

  1. C ++を使用して、文字列内の1つの余分な文字を検索します。

    2つの文字列SとTがあり、Sの長さがnで、Tの長さがn + 1であるとします。TはSに存在するすべての文字を保持しますが、1つの余分な文字を保持します。私たちの仕事は、いくつかの効率的なアプローチを使用して余分なキャラクターを見つけることです。 この問題を解決するために、1つの空のハッシュテーブルを取得し、2番目の文字列のすべての文字を挿入してから、最初の文字列から各文字を削除します。残りの文字は余分な文字です。 例 #include<iostream> #include<unordered_map> using namespace std; char getExtr

  2. PythonのTの文字列Sのすべてのアナグラムの開始インデックスを見つけるプログラム

    2つの文字列SとTがあるとすると、TでSのアナグラムのすべての開始インデックスを見つける必要があります。文字列は小文字のみで構成され、文字列SとTの両方の長さは20と100を超えません。 したがって、入力がS =cab T =bcabxabcのようである場合、出力は[0、1、5、]となり、部分文字列は「bca」、「cab」、「abc」になります。 これを解決するには、次の手順に従います。 マップm、n:=sのサイズを定義し、左:=0、右:=0、カウンター:=pのサイズを設定 配列を定義します pの文字の頻度をマップmに保存します 右の場合:=0からn– 1