ホームページ >バックエンド開発 >C++ >C++ の文字列検索テクノロジ

C++ の文字列検索テクノロジ

WBOY
WBOYオリジナル
2023-08-22 11:17:045564ブラウズ

C++ の文字列検索テクノロジ

C では、文字列検索テクノロジは文字列操作を処理する際に必要なスキルの 1 つであるため、非常に重要なスキルです。 C には、文字列検索に役立つさまざまな組み込み関数とアルゴリズムが用意されており、さまざまな状況で使用できる一般的なスキルを提供します。

この記事では、一般的に使用される C 文字列検索手法のいくつかと、その長所、短所、および使用シナリオを紹介します。

  1. 文字列検索関数

C 文字列検索関数は、最も一般的に使用される検索手法の 1 つであり、文字列の中から目的の文字列を見つけるように設計されています。 。 C で一般的に使用される文字列検索関数をいくつか次に示します:

  • find()

find() 関数は、文字列内の部分文字列を検索するために使用できます。または文字を取得し、最初に出現した位置を返します。見つからない場合は、std::string::npos が返されます。たとえば、次のコードは文字列 s 内の部分文字列「hello」を検索します。

std::string s = "hello world";
size_t pos = s.find("hello");
if (pos != std::string::npos) {
    // found
}
  • rfind()

rfind() 関数は find 関数と似ています。 () 関数ですが、右から検索を開始し、最後に見つかったものを返します。たとえば、次のコードは文字列 s 内で最後に出現した文字 'e' を検索します。

std::string s = "hello world";
size_t pos = s.rfind('e');
if (pos != std::string::npos) {
    // found
}
  • find_first_of()

find_first_of() 関数が使用されます。 to find 文字列内で指定された文字の 1 つが最初に出現する位置。たとえば、次のコードは文字列 s 内で最初に出現した母音を検索します。

std::string s = "hello world";
size_t pos = s.find_first_of("aeiou");
if (pos != std::string::npos) {
    // found
}
  • find_last_of()

find_last_of() 関数と find_first_of()機能は同じですが、右から左に見ます。たとえば、次のコードは文字列 s 内で最後に出現する母音を検索します。

std::string s = "hello world";
size_t pos = s.find_last_of("aeiou");
if (pos != std::string::npos) {
    // found
}

これらの関数は、C で最も一般的に使用される文字列検索手法です。これらの関数は非常に柔軟で、文字列内で使用できます。さまざまなタイプの部分文字列と文字を検索します。欠点は、最初の一致が見つかると検索が停止し、位置が返されるため、探している結果が得られない可能性があることです。

  1. 文字列検索アルゴリズム

C STL は、ターゲット文字列または文字列内の文字を検索するために使用できる非常に強力なアルゴリズムをいくつか提供します。これらのアルゴリズムは汎用的に設計されており、多くの種類のデータ構造を処理できます。一般的に使用される C 文字列検索アルゴリズムのいくつかを次に示します。

  • std::search()

search() 関数は、2 つのイテレータの範囲で使用できます。サブシーケンスを返し、最初のサブシーケンスの反復子を返します。たとえば、次のコードは文字列 s 内の部分文字列「world」を検索します。

std::string s = "hello world";
std::string sub = "world";
auto it = std::search(s.begin(), s.end(), sub.begin(), sub.end());
if (it != s.end()) {
    // found
}
  • std::find()

find() 関数は次のようになります。イテレータ範囲内の要素を検索し、要素のイテレータを返します。たとえば、次のコードは文字列 s 内の文字 'e' の位置を検索します。

std::string s = "hello world";
auto it = std::find(s.begin(), s.end(), 'e');
if (it != s.end()) {
    // found
}
  • std::find_first_of()

find_first_of() 関数は以前に紹介したものと同じです。 string 関数と同様に、指定された文字の 1 つに一致する反復子の範囲内の最初の要素を検索し、要素の反復子を返すために使用されます。たとえば、次のコードは文字列 s の最初の母音を検索します。

std::string s = "hello world";
auto it = std::find_first_of(s.begin(), s.end(), "aeiou");
if (it != s.end()) {
    // found
}

これらのアルゴリズムは汎用的でスケーラブルであり、さまざまなデータ構造やシナリオで使用できます。欠点は、ターゲットの文字列または文字を見つけるために追加の反復操作が必要になるため、文字列関数の直接検索手法よりも遅くなる可能性があることです。

  1. 正規表現

C 標準ライブラリには、文字列内の特定のパターンに一致する部分文字列を検索するために使用できる正規表現ライブラリも提供されています。正規表現を使用すると、より複雑なパターンを検索できます。たとえば、携帯電話番号や電子メール アドレスなど、特定の形式のテキストを検索するのに役立ちます。正規表現ライブラリを使用して単純なパターンを見つける例を次に示します。

std::string s = "The quick brown fox jumps over the lazy dog";
std::regex reg("fox.*lazy");
if (std::regex_search(s, reg)) {
    // found
}

正規表現は、さまざまな種類のテキスト データの処理と検索に役立つ強力で柔軟な手法です。ただし、これらの利点にはいくつかの欠点も伴い、正規表現の構文は複雑であり、以前に紹介した他の検索手法よりも時間がかかる可能性があります。

概要

C プログラミングでは、文字列検索テクノロジは重要な領域です。この記事では、文字列検索関数、文字列検索アルゴリズム、正規表現などの一般的な文字列検索手法をいくつか紹介します。これらの技術的な欠点はさまざまですが、それらはすべてさまざまなデータ構造やシナリオで使用できます。プログラマーは、文字列検索を最速かつ正確に実行するために最適なツールを選択する必要があります。

以上がC++ の文字列検索テクノロジの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。