怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

C言語 - 文字や文字列を検索する | strchr(), strrchr(), strpbrk(), strstr()

文字を検索するには strchr() または strrchr() を使う。

strchr() は文字列の先頭から文字を検索する。

strrchr() は文字列の末尾から文字を検索する。

なお、これらの関数で検索できるのは〝文字〟であり〝文字列〟ではないことに留意する。

先頭から文字を検索する

strchr() は指定された文字を最初に検出したポインタを返す。

#include <string.h>
char *strchr(const char *string, int c);

引数

  • string
    文字列

  • c
    検索する文字

戻り値

指定された文字を最初に検出したポインタ。

文字が見つからなかった場合は NULL が返る。

次のプログラムは、文字列 “Hello World!” の中で最初にある “o” のポインタを返す。

char buf[] = "Hello World!";
char *p;

p = strchr(buf, 'o');
printf("%s\n", p);
/* → o World! */

末尾から文字を検索する

strrchr() は指定された文字を最後に検出したポインタを返す。

#include <string.h>
char *strrchr(const char *string, int c);

引数

  • string
    文字列

  • c
    検索する文字

戻り値

指定された文字を最後に検出したポインタ。

文字が見つからなかった場合は NULL が返る。

次のプログラムは、文字列 “Hello World!” の中で最後にある “o” のポインタを返す。

char buf[] = "Hello World!";
char *p;

p = strrchr(buf, 'o');
printf("%s\n", p);
/* → orld! */

文字群を検索する

#include <string.h>
char *strpbrk(const char *string, const char *search_chars);

string 内で search_chars の文字のいずれかが最初に現れる位置を検索する。

文字列ではなく文字群であることに注意する。
たとえば search_chars が “AB” の場合、“A” または “B” での検索となる。

戻り値として文字が最初に現れる位置のポインタを返す。 いずれの文字も見つからない場合は NULL を返す。


次の例は、文字列 “HELLO WORLD!” の中で “R” または “W” のいずれかが最初に現れる位置のポインタを取得する。

char string[] = "HELLO WORLD!";
char search_chars[] = "RW";
char *p = NULL;

p = strpbrk(string, search_chars);
if (p == NULL) {
    printf("No characters.\n");
} else {
    printf("Result:\"%s\"\n", p);
}

プログラムの実行結果は以下のようになる。
(“W” の方が先に見つかる)

Result:"WORLD!"

文字列を検索する

#include <string.h>
char *strstr(const char *string, const char *search_string);

string 内で search_string が最初に現れる位置を検索する。
search_string のヌル文字は検索対象に含まれない。

戻り値として search_string が最初に現れる位置のポインタを返す。
見つからない場合は NULL を返す。


次のプログラムは、文字列 “HELLO WORLD!” の中で最初にある “WORLD” の位置を取得する。

char string[] = "HELLO WORLD!";
char search_string[] = "WORLD";
char *p = NULL;

p = strstr(string, search_string);
if (p == NULL) {
    printf("No strings.\n");
} else {
    printf("Result:\"%s\"\n", p);
}

プログラムの実行結果は以下のようになる。

Result:"WORLD!"