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

C++ STLのmatch_results::size()関数の使い方と実例を徹底解説

この記事では、C++ STLにおけるmatch_results::size()関数の動作、構文、そして具体的な使用例について詳しく解説します。

C++ STLにおけるmatch_resultsとは?

std::match_resultsは、正規表現によるマッチ操作の結果として得られた文字シーケンスのコレクションを保持するための、コンテナに似た特殊なクラステンプレートです。このコンテナには、対象シーケンス(ターゲット文字列)に対してregexマッチ操作を行った際の各マッチ結果が格納されます。

match_results::size()とは?

match_results::size()関数は、C++ STLに組み込まれている関数で、<regex>ヘッダーファイル内で定義されています。size()は、関連付けられたmatch_resultsオブジェクトに含まれるマッチの総数を取得するために使用されます。この関数は、オブジェクト内に存在するマッチおよびサブマッチ(キャプチャグループ)の合計数を表すsize_type型の値を返します。

構文

smatch_name.size();

パラメータ

この関数は引数を受け取りません。

戻り値

この関数は、match_resultsオブジェクトに含まれるマッチおよびサブマッチの総数(size_type型)を返します。

使用例

入力: string str = "Tutorials Point";
    regex R("(Tutorials)(.*)");
    smatch Mat;
    regex_match(str, Mat, R);
    Mat.size();
出力: 3

この例では、正規表現全体のマッチ1つと、キャプチャグループ2つ((Tutorials)(.*))の合計3つがカウントされます。

サンプルコード①

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Point";
    regex R("(Tutorials)(.*)");
    smatch Mat;
    regex_match(str, Mat, R);
    cout<<"Size is: " << Mat.size() << endl;
    return 0;
}

出力

上記のコードを実行すると、以下の出力が得られます −

Size is: 3

サンプルコード②

次に、size()をループ処理と組み合わせて、各マッチの長さを取得する例を見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Point Tutorials";
    regex R("(Tutorials)(.*)");
    smatch Mat;
    regex_match(str, Mat, R);
    for (int i = 0; i < Mat.size(); i++) {
        cout <<"length of "<<Mat.length(i)<< endl;
    }
    return 0;
}

出力

上記のコードを実行すると、以下の出力が得られます −

length of 25
length of 9
length of 16

インデックス0は正規表現全体のマッチ(25文字)、インデックス1は最初のキャプチャグループ(Tutorials)(9文字)、インデックス2は2番目のキャプチャグループ(.*)(16文字)に対応しています。このようにsize()を使えば、マッチ結果の要素数を簡単に取得し、柔軟な処理が可能になります。

  1. C++ STLのmap::max_size()関数の使い方とサンプルコードを解説

    本記事では、C++ STLにおけるmap::max_size()関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるマップ(map)とは? マップは連想コンテナの一種で、キー値とマップされた値の組み合わせからなる要素を特定の順序で格納することができます。マップコンテナ内のデータは、内部的に常に対応するキーに基づいてソートされます。また、マップコンテナ内の値には、一意なキーを通じてアクセスします。 map::max_size()とは何か? map::max_size()関数は、C++ STLに組み込まれている関数であり、<map>ヘッダファイルで定

  2. C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

    C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス