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

C++プログラムで指定された文字列で開始および終了する文字列内のさまざまなサブ文字列


このチュートリアルでは、指定された文字列で開始および終了する部分文字列の総数を見つけるプログラムを作成します。

1つの文字列と2つの部分文字列が与えられます。指定された2つの部分文字列で開始および終了するさまざまな部分文字列数を見つける必要があります。例を見てみましょう。

入力

str = "getmesomecoffee"
start = "m"
end = "e"

出力

6

指定された文字列には、合計6つの異なるサブ文字列があります。それらは私、mesome、mesomemecoffe、mesomemecoffee、mecoffe、mecoffeeです。

問題を解決するための手順を見てみましょう。

  • 文字列を初期化します。

  • strを繰り返し処理し、開始部分文字列と終了部分文字列のインデックスを見つけます。それらを別々の配列に格納します。

  • セットを初期化して、さまざまなサブストリングを格納します。

  • strを繰り返します。

    • 現在のインデックスが、前に作成した配列の開始文字列と一致するかどうかを確認します。

    • 開始文字列のインデックスが見つかったら、終了文字列を検索します。

    • 変数の終わりが見つかるまで、すべての文字列を追加します。

    • 終了文字列が見つかったら、部分文字列の数を増やし、その部分文字列をセットに追加します。

    • サブストリング変数をリセットします。

  • 部分文字列の数を出力します。

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int getSubstringsCount(string str, string start, string end) {
   int substrings_count = 0, str_length = str.size(), start_length = start.size(), end_length = end.size();
   int start_matches_index[str_length] = {0}, end_matches_index[str_length] = {0};
   for (int i = 0; i < str_length; i++) {
      if (str.substr(i, start_length) == start) {
         start_matches_index[i] = 1;
      }
      if (str.substr(i, end_length) == end) {
         end_matches_index[i] = 1;
      }
   }
   set<string> substrings;
   string current_substring = "";
   for (int i = 0; i < str_length; i++) {
      if (start_matches_index[i]) {
         for (int j = i; j < str_length; j++) {
            if (!end_matches_index[j]) {
               current_substring += str[j];
            }
            if (end_matches_index[j]) {
               current_substring += str.substr(j, end_length);
               if (substrings.find(current_substring) == substrings.end()) {
                  substrings_count++;
               }
               substrings.insert(current_substring);
            }
         }
         current_substring = "";
      }
   }
   return substrings_count;
}
int main() {
   string str = "getmesomecoffee";
   string start = "m";
   string end = "e";
   cout << getSubstringsCount(str, start, end) << endl;
   return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます。

6

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C ++を使用して、指定された一方の端と中間の線のもう一方の端点を見つけます

    この問題では、線の始点A(x A の2点の座標が与えられます。 、y A )および中点M(x M 、y M )。私たちのタスクは、指定された一方の端と中央にある線のもう一方の端点を見つけることです。 。 問題を理解するために例を見てみましょう 入力 A = [1, 2], M = [3, 0] 出力 [5, -2] 説明 行は-です ソリューションアプローチ この問題を解決するために、数学で学んだ幾何学の概念を使用します。すべての線に中点式があることを覚えているなら、 mid(x) = (x1 + x2) / 2 mid(y) = (y1 + y2) / 2

  2. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},