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::string
のfind
関数について詳しく説明します。この関数を使用すると、文字列内の特定の文字や部分文字列を検索できます。これは、文字列の検索とマッチングに非常に便利です。具体的な使用方法については、次のセクションで説明します。
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
は非常に強力なツールで、複雑な文字列の検索やマッチングに広く使用されています。