C++ String 検索: find関数の詳細な解説

C++のstd::stringとは

C++のstd::stringは、標準ライブラリの一部であり、文字列を操作するためのクラスです。std::stringは、動的にサイズを変更できるため、固定長のCスタイル文字列よりも柔軟性があります。

以下に、std::stringの基本的な使用方法を示します。

#include <string>

int main() {
    // 文字列の宣言と初期化
    std::string str = "Hello, World!";

    // 文字列の長さを取得
    int len = str.length();

    // 文字列の連結
    std::string str2 = str + " How are you?";

    // 文字列の部分文字列を取得
    std::string substr = str.substr(0, 5);  // "Hello"

    return 0;
}

このように、std::stringはC++で文字列を扱うための強力なツールです。次のセクションでは、std::stringfind関数について詳しく説明します。この関数を使用すると、文字列内の特定の文字や部分文字列を検索できます。これは、文字列の検索とマッチングに非常に便利です。具体的な使用方法については、次のセクションで説明します。

find関数とは

C++のstd::stringクラスには、文字列内の特定の文字や部分文字列を検索するためのfind関数があります。この関数は、指定した文字列が最初に現れる位置を返します。

以下に、find関数の基本的な使用方法を示します。

#include <string>

int main() {
    std::string str = "Hello, World!";

    // 'World'が最初に現れる位置を検索
    size_t pos = str.find("World");

    if (pos != std::string::npos) {
        // 'World'が見つかった場合
        std::cout << "'World' found at position: " << pos << std::endl;
    } else {
        // 'World'が見つからなかった場合
        std::cout << "'World' not found" << std::endl;
    }

    return 0;
}

このコードでは、find関数を使用して文字列str内で"World"が最初に現れる位置を検索しています。find関数は、見つかった場合は開始位置を、見つからなかった場合はstd::string::nposを返します。

次のセクションでは、find関数の詳細な使い方について説明します。

find関数の使い方

C++のstd::stringクラスのfind関数は、文字列内で指定した文字列が最初に現れる位置を返します。以下にその使用方法を示します。

#include <string>
#include <iostream>

int main() {
    std::string str = "Hello, World!";

    // 'World'が最初に現れる位置を検索
    size_t pos = str.find("World");

    if (pos != std::string::npos) {
        // 'World'が見つかった場合
        std::cout << "'World' found at position: " << pos << std::endl;
    } else {
        // 'World'が見つからなかった場合
        std::cout << "'World' not found" << std::endl;
    }

    return 0;
}

このコードでは、find関数を使用して文字列str内で"World"が最初に現れる位置を検索しています。find関数は、見つかった場合は開始位置を、見つからなかった場合はstd::string::nposを返します。

また、find関数はオーバーロードされており、検索を開始する位置を指定することも可能です。

std::string str = "Hello, World! World!";
size_t pos = str.find("World", 6);  // 6番目の位置から検索を開始

このように、find関数は非常に便利で、文字列の検索とマッチングに広く使用されています。

rfindで末尾から検索する

C++のstd::stringクラスには、rfindという関数もあります。この関数は、find関数と同様に文字列内の特定の文字や部分文字列を検索しますが、rfindは文字列の末尾から検索を開始します。

以下に、rfind関数の基本的な使用方法を示します。

#include <string>
#include <iostream>

int main() {
    std::string str = "Hello, World! World!";

    // 'World'が最後に現れる位置を検索
    size_t pos = str.rfind("World");

    if (pos != std::string::npos) {
        // 'World'が見つかった場合
        std::cout << "'World' found at position: " << pos << std::endl;
    } else {
        // 'World'が見つからなかった場合
        std::cout << "'World' not found" << std::endl;
    }

    return 0;
}

このコードでは、rfind関数を使用して文字列str内で"World"が最後に現れる位置を検索しています。rfind関数は、見つかった場合は開始位置を、見つからなかった場合はstd::string::nposを返します。

また、rfind関数もfind関数と同様にオーバーロードされており、検索を開始する位置を指定することも可能です。

std::string str = "Hello, World! World!";
size_t pos = str.rfind("World", 15);  // 15番目の位置から検索を開始

このように、rfind関数は文字列の末尾から検索を行うため、特定の文字列が最後に現れる位置を知りたい場合に非常に便利です。

find_first_ofを使って先頭から1字を探す

C++のstd::stringクラスには、find_first_ofという関数もあります。この関数は、指定した文字の集合の中から最初に見つかった文字の位置を返します。

以下に、find_first_of関数の基本的な使用方法を示します。

#include <string>
#include <iostream>

int main() {
    std::string str = "Hello, World!";

    // 'o'または'r'または'd'が最初に現れる位置を検索
    size_t pos = str.find_first_of("ord");

    if (pos != std::string::npos) {
        // 'o'または'r'または'd'が見つかった場合
        std::cout << "First occurrence of 'o' or 'r' or 'd' found at position: " << pos << std::endl;
    } else {
        // 'o'または'r'または'd'が見つからなかった場合
        std::cout << "No occurrence of 'o' or 'r' or 'd' found" << std::endl;
    }

    return 0;
}

このコードでは、find_first_of関数を使用して文字列str内で"o""r"、または"d"が最初に現れる位置を検索しています。find_first_of関数は、見つかった場合は開始位置を、見つからなかった場合はstd::string::nposを返します。

また、find_first_of関数もfind関数と同様にオーバーロードされており、検索を開始する位置を指定することも可能です。

std::string str = "Hello, World!";
size_t pos = str.find_first_of("ord", 5);  // 5番目の位置から検索を開始

このように、find_first_of関数は特定の文字集合の中から最初に見つかった文字の位置を知りたい場合に非常に便利です。

正規表現で全て取得

C++では、std::regexというライブラリを使用して正規表現を扱うことができます。このライブラリを使用すると、文字列から特定のパターンに一致する部分文字列を検索したり、抽出したりすることができます。

以下に、std::regexを使用して文字列から全ての数字を取得する例を示します。

#include <string>
#include <regex>
#include <iostream>

int main() {
    std::string str = "Hello, World! 123 456 789";

    // 数字の正規表現
    std::regex r("\\d+");

    // 正規表現でマッチする全ての部分文字列を取得
    std::sregex_iterator it(str.begin(), str.end(), r);
    std::sregex_iterator end;

    while (it != end) {
        std::cout << it->str() << std::endl;
        ++it;
    }

    return 0;
}

このコードでは、std::regexを使用して文字列str内の全ての数字を取得しています。std::sregex_iteratorは、正規表現に一致する全ての部分文字列を順に取得するためのイテレータです。

このように、std::regexは非常に強力なツールで、複雑な文字列の検索やマッチングに広く使用されています。

投稿者 dodo

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です