logo

C++ の部分文字列

substring 関数は、次のような文字列操作を処理するために使用されます。 割れた() 追加() 、など 。このオブジェクトの部分文字列のコピーに初期化された値を持つ新しい文字列を生成します。 C++ では、std::substr()、文字列関数に必要なヘッダー ファイルは次のとおりです。

回文番号

部分文字列関数は 2 つの値を取ります 位置 そして のみ を引数として指定し、その値がこのオブジェクトの部分文字列のコピーに初期化された、新しく構築された文字列オブジェクトを返します。文字列のコピーは次から始まります 位置 そしてそれまで完了します ポスト+レン は [pos, pos+len) を意味します。

構文:



string substr (size_t pos, size_t len) const;>

パラメーター:

  • 位置: コピーされる最初の文字の位置。
  • のみ: 部分文字列の長さ。
  • サイズ_t: 符号なし整数型です。

戻り値: 文字列オブジェクトを返します。

例:

C++
// C++ program to demonstrate functioning of substr() #include  #include  using namespace std; int main() {  // Take any string  string s1 = 'Geeks';  // Copy two characters of s1 (starting  // from position 3)  string r = s1.substr(3, 2);  // prints the result  cout << 'String is: ' << r;  return 0; }>

出力
String is: ks>
  • 時間計算量: の上)
  • 補助スペース: の上)

その他の例:

string: '  h e l l o w o r l d  ' index: 0 1 2 3 4 5 6 7 8 9 10>

次のように書くと、 –

  • s.substr(s.begin(),3) => コンパイルエラー (反復子を int データ型に変換できないため)
  • s.substr(2,3) => llo (2 番目のインデックスの 3 文字)
  • s.substr(*s.begin()-s[0],3) => hel (*s.begin() は ‘h’、その後 ‘h’-s[0]=> ‘h’-‘h’=0 は substr(0,3) を意味します —– 0 番目のインデックスからの 3 文字
  • s.substr(5,1) => ‘ ‘ (空白スペース、つまり 5 番目のインデックスを印刷します)
  • s.substr(2,0) => (出力されません) (2 番目のインデックスからゼロ文字を選択します)

覚えておくべき重要なポイント

  1. 最初の文字のインデックスは 0 (1 ではありません) です。
  2. もし 位置 が文字列長に等しい場合、関数は空の文字列を返します。
  3. もし 位置 文字列の長さを超えると、out_of_range がスローされます。この場合、文字列には変更はありません。
  4. 要求された部分文字列が のみ 文字列のサイズより大きい場合、返される部分文字列は次のとおりです。 [位置、サイズ())
  5. もし のみ がパラメータとして渡されない場合、返されるサブ文字列は次のとおりです。 [pos, size())。

部分文字列の応用

  • 文字の後の部分文字列を取得する
  • 文字の前の部分文字列を取得する
  • 指定された文字列のすべての部分文字列を出力します
  • 数値を表す文字列のすべての部分文字列の合計
  • 数値を表す文字列のすべての部分文字列の最大値を出力します。
  • 数値を表す文字列のすべての部分文字列の最小値を出力します。

文字の後の部分文字列を取得する

ここでは、文字列と文字が指定されており、部分文字列とその後に指定された文字を出力する必要があります。
以降をすべて抽出します : 文字列の中で 犬猫

例:

C++
// C++ program to demonstrate functioning of substr() #include  #include  using namespace std; int main() {  // Take any string  string s = 'dog:cat';  // Find position of ':' using find()  int pos = s.find(':');  // Copy substring after pos  string sub = s.substr(pos + 1);  // prints the result  cout << 'String is: ' << sub;  return 0; }>

出力
String is: cat>

時間計算量: の上)

補助スペース: の上)

Javaでcsvファイルを読み取る

文字の前の部分文字列を取得するには?

ここでは、文字列と文字が指定されており、部分文字列とその後に指定された文字を出力する必要があります。

例:

C++
// C++ program to demonstrate functioning of substr() #include  #include  using namespace std; int main() {  // Take any string  string s = 'dog:cat';  // Find position of ':' using find()  int pos = s.find(':');  // Copy substring before pos  // Extract everything before the ':' in the string  // 'dog:cat'.  string sub = s.substr(0, pos);  // prints the result  cout << 'String is: ' << sub;  return 0; }>

出力
String is: dog>

時間計算量: の上)

補助スペース: の上)

指定された文字列のすべての部分文字列を出力するにはどうすればよいですか?

入力として文字列が与えられます。指定された文字列の空でない部分文字列をすべて出力するプログラムを作成する必要があります。

例:

C++
// C++ program to demonstrate all possible // substrings of a given string #include  using namespace std; // Function to print all sub strings void subString(string s, int n) {  // Pick starting point in outer loop  // and lengths of different strings for  // a given starting point  for (int i = 0; i < n; i++)  for (int len = 1; len <= n - i; len++)  cout << s.substr(i, len) << endl; } // Driver program to test above function int main() {  string s = 'abcd';  subString(s, s.length());  return 0; }>

出力
a ab abc abcd b bc bcd c cd d>

時間計算量: の上3)

補助スペース: ○(1)

ブースアルゴリズム

数値を表す文字列のすべての部分文字列の合計を出力する

文字列として表される整数を指定すると、この文字列の考えられるすべての部分文字列の合計を取得する必要があります。

例:

2対1マルチプレクサ
C++
// C++ program to print sum of all possible substring of // a number represented as a string #include  using namespace std; // Utility method to convert character digit to // integer digit int toDigit(char ch) { return (ch - '0'); } // Returns sum of all substring of num int sumOfSubstrings(string s) {  vector v;  int n = s.length();  for (int i = 0; i< n; i++) {  for (int len = 1; len <= n - i; len++) {  string sub = (s.substr(i, len));  int x = stoi(sub);  v.push_back(x);  }  }  int res = accumulate(v.begin(), v.end(), 0);  return res; } // Driver code to test above methods int main() {  string num = '1234';  cout << sumOfSubstrings(num) << endl;  return 0; }>

出力
1670>

時間計算量: の上3)
補助スペース: の上)

数値を表す文字列のすべての部分文字列の最大値を出力する

文字列として表される整数を指定すると、数値を表す指定された文字列のすべての可能な部分文字列の最大値を取得する必要があります。

例:

C++
// C++ program to demonstrate max. of all possible // substrings of a given string #include  using namespace std; void subString(string s, int n) {  vector v;  for (int i = 0; i< n; i++) {  for (int len = 1; len <= n - i; len++) {  string sub = (s.substr(i, len));  int x = stoi(sub);  v.push_back(x);  }  }  cout << *max_element(v.begin(), v.end()) << endl; } // Driver program to test above function int main() {  string s = '823';  subString(s, s.length());  return 0; }>

出力
823>

説明: すべての部分文字列は { 8, 82, 823, 2, 23, 3 } で、最大値の部分文字列は 823 です。

時間計算量: の上3)

補助スペース: の上!)

数値を表す文字列のすべての部分文字列の最小値を出力する

文字列として表される整数を指定すると、数値を表す指定された文字列のすべての可能な部分文字列の最小値を取得する必要があります。

例:

C++
// C++ program to demonstrate minimum of all possible // substrings of a given string #include  using namespace std; void subString(string s, int n) {  vector v;  for (int i = 0; i< n; i++) {  for (int len = 1; len <= n - i; len++) {  string sub = (s.substr(i, len));  int x = stoi(sub);  v.push_back(x);  }  }  cout << *min_element(v.begin(), v.end()) << endl; } // Driver program to test above function int main() {  string s = '4572';  subString(s, s.length());  return 0; }>

出力
2>

時間計算量: の上3)
補助スペース: の上!)

部分文字列のその他の応用

  • テキスト検索: 部分文字列は、大きなテキスト本文内の単語または語句を検索するために使用されます。これは検索エンジンで一般的に使用され、ユーザーが語句またはキーワードを入力すると、エンジンはその部分文字列を含む一致を検索します。
  • テキスト解析: 部分文字列は、大きな文字列を小さなチャンクに分割するためにテキスト解析アルゴリズムで使用されます。たとえば、パーサーを使用して文から個々の単語を抽出し、それらをデータ構造に保存することができます。
  • テキストの操作: 部分文字列は、テキスト操作アプリケーションで、大きなテキスト本文内の特定の単語や語句を検索して置換するために使用されます。これを使用して、検索および置換タスクを実行したり、ドキュメント内の情報を更新したりできます。
  • 自然言語処理: 部分文字列は、自然言語処理アルゴリズムで単語やフレーズを識別するために使用されます。これは、アルゴリズムがユーザーが話した単語を識別する必要がある音声認識などのアプリケーションで使用されます。
  • パターン認識: 部分文字列は、データ内のパターンを識別するためにパターン認識アルゴリズムで使用されます。これは、財務データの傾向を特定したり、画像の異常を検出したりするために使用できます。
  • パスワードのセキュリティ: 部分文字列はパスワードの検証に使用されます。これは、入力されたパスワードを、保存されている元のパスワードの部分文字列と比較することによって行われます。 2 つが一致すると、パスワードが検証されます。この技術は、セキュリティを強化するために多くのアプリケーションで使用されています。