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

C++で文字列を検索して置換


文字列Sがあるとすると、文字のグループを新しい文字に置き換えるいくつかの置換操作を実行します。各置換操作には、開始インデックスi、ソースワードx、およびターゲットワードyの3つのパラメータがあります。ここでの規則は、xが元の文字列Sの位置iで始まる場合、xの出現をyに置き換えるというものです。それ以外の場合は何もしません。

したがって、例として、S ="abcd"があり、置換操作i =2、x ="cd"、y ="ffff"がある場合、 "cd"は元の文字列の位置2から始まるため、考えてみます。 S、これを「ffff」に置き換える必要があります。

置換操作i=0、x ="ab"、y ="eee"と、別の置換操作i =2、x ="ec"の両方がある場合、S="abcd"の別の例を見てみましょう。 、y ="ffff"、この2番目の操作は何もしません。これは、元の文字列S [2] ='c'で、x [0]='e'と一致しないためです。

したがって、文字列S =“ abcd”、indexes =[0,2]、sources =[“ a”、“ cd”]、targets =[“ eee”、“ ffff”]の場合、出力は次のようになります。 「eeebffff」。これは、「a」がSの位置0から始まるため、「eee」に置き換えられているためです。これで、「cd」はSのインデックス2から始まるため、「ffff」に置き換えられます。

これを解決するには、次の手順に従います-

  • 並べ替えと呼ばれるペアの配列を定義します。n:=インデックス配列のサイズ
  • 0からn–1の範囲のiの場合
    • ペア(indexes [i]、i)をsortedに挿入します。
  • 並べ替えを逆の順序で並べ替える
  • 0からn–1の範囲のjの場合
    • i:=ソートされたペアの最初の値[j]
    • src:=sources[ソートされたペアの2番目の値[j]]
    • target:=targets[ソートされたペアの2番目の値[j]]
    • インデックスiからソースのサイズまでのSのサブストリング– 1がソースと同じである場合、
      • S:=(インデックス0からiまでのSのサブストリング)ターゲットを連結し、連結(iからソースのサイズまでのSのサブストリング– 1)
  • Sを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string findReplaceString(string S, vector<int>& indexes, vector<string>& sources,       vector<string>& targets) {
      vector < pair <int, int> > sorted;
      int n = indexes.size();
      for(int i = 0; i < n; i++){
         sorted.push_back({indexes[i], i});
      }
      sort(sorted.rbegin(), sorted.rend());
      for(int j = 0; j < n; j++){
         int i = sorted[j].first;
         string source = sources[sorted[j].second];
         string target = targets[sorted[j].second];
         if(S.substr(i, source.size()) == source){
            S = S.substr(0, i) + target + S.substr(i + source.size());
         }
      }
      return S;
   }
};
main(){
   vector<int> v1 = {0, 2};
   vector<string> v2 = {"a", "cd"};
   vector<string> v3 = {"eee", "ffff"};
   Solution ob;
   cout << (ob.findReplaceString("abcd", v1, v2, v3));
}

入力

"abcd"
[0, 2]
["a", "cd"]
["eee", "ffff"]

出力

eeebffff

  1. C++で文字列の最初に繰り返される単語を検索します

    この問題では、コンマで区切られた単語で構成される文字列strです。私たちのタスクは、文字列内の最初に繰り返される単語を見つけることです。 。 文字列内で繰り返される最初の単語「2つのスペースの間の文字列」を見つける必要があります。 問題を理解するために例を見てみましょう Input : str = "C program are easy to program" Output : program ソリューションアプローチ この問題の簡単な解決策は、ハッシュマップデータ構造を使用することです。最初に繰り返される単語を見つけるために、各単語とその数(文字列に出現した回数)

  2. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &