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

C++のstrstr()関数とは?文字列内の部分文字列検索方法を解説

C++のstrstr()関数は、ヘッダーファイル string.h で定義されている標準関数の一つです。この関数は、ある文字列の中から特定の部分文字列(サブストリング)を検索し、その最初の出現位置を見つけるために使用されます。文字列の照合は終端文字「\0」で停止し、「\0」自体は検索対象に含まれません。

strstr()関数の構文

strstr()関数の構文は以下の通りです。

char *strstr( const char *str1, const char *str2)

上記の構文では、strstr()は文字列 str1 の中から文字列 str2 が最初に出現する位置を検索します。見つかった場合はその位置を指すポインターを返し、見つからなかった場合は NULL を返します。

strstr()関数の使用例

以下は、strstr()関数を使用したプログラムの例です。

#include <iostream>
#include <string.h>

using namespace std;
int main() {
   char str1[] = "Apples are red";
   char str2[] = "are";
   char *ptr;
   ptr = strstr(str1, str2);

   if(ptr)
   cout<<"Occurance of \""<< str2 <<"\" in \""<< str1 <<"\" is at position "<<ptr - str1 + 1;

   else
   cout<<"There is no occurance of \""<< str2 <<"\" in "<<str1;
   return 0;
}

実行結果

上記のプログラムの出力は以下の通りです。

Occurance of "are" in "Apples are red" is at position 8

プログラムの解説

上記のプログラムでは、str1 と str2 にそれぞれ「Apples are red」と「are」という値が定義されています。該当するコードは以下の通りです。

char str1[] = "Apples are red";
char str2[] = "are";
char *ptr;

ポインター ptr は、strstr()関数を使うことで「Apples are red」の中に「are」が最初に出現する位置を指します。該当するコードは以下の一行です。

ptr = strstr(str1, str2);

ポインター ptr に値が格納されている場合、str2 が str1 内に存在する位置が表示されます。一方、値が NULL の場合は、str2 が str1 内に存在しない旨のメッセージが表示されます。以下にそのコードを示します。

if(ptr)
cout<<"Occurance of \""<< str2 <<"\" in \""<< str1 <<"\" is at position "<<ptr - str1 + 1;

else
cout<<"There is no occurance of \""<< str2 <<"\" in "<<str1;

なお、位置の計算には「ptr - str1 + 1」という式が使われています。これは、ポインター同士の差分(0から始まるインデックス)に1を加えることで、人間にとって分かりやすい1から始まる位置番号に変換しています。この例では、「are」は8文字目から始まるため、実行結果に「position 8」と表示されます。

  1. C++の識別子とは?命名ルールと具体例をわかりやすく解説

    C++における識別子(identifier)とは、変数、関数、クラス、モジュールなど、プログラマが定義するさまざまな要素に名前を付けて識別するために使われる名称です。識別子の命名には以下のルールがあります。先頭は半角アルファベットの大文字(A〜Z)、小文字(a〜z)、またはアンダースコア(_)で始める必要があります。2文字目以降は、英字・数字(0〜9)・アンダースコアを自由に組み合わせられます。識別子の中に「@」「$」「%」などの記号(句読点・特殊文字)を使うことはできません。大文字と小文字は区別されるC++は大文字と小文字を厳密に区別するプログラミング言語です。そのため、「Manpower」

  2. Linux向けC++開発に最適なIDEのおすすめ6選

    大規模なプロジェクトをテキストエディタだけで管理するのは容易ではありません。そうしたケースではIDE(統合開発環境)を活用することで、生産性が向上し、フラストレーションも大幅に軽減されるでしょう。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。「Linux上のC++開発において唯一のベスト」と呼べるIDEは存在せず、賢くツールを見極める必要があります。ここでは、人気が高く、編集部のおすすめでもあるLinux向けIDEを紹介します。Linuxで使えるC++向けIDE おすすめ6選1. NetBeansNetBeansは、C/C++をはじめ多くのプログラミング言語に対