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

C言語の文字列検索関数とは?主な関数の種類と使い方を解説

C言語の主な文字列検索関数

C言語の標準ライブラリ(<string.h>)には、文字列の中から特定の文字や文字グループを探し出すための検索関数が複数用意されています。代表的な文字列検索関数は以下の通りです。

char *strchr(const char *string, int c);文字列内で文字cが最初に現れる位置を検索します。
char *strrchr(const char *string, int c);文字列内で文字cが最後に現れる位置を検索します。
char *strpbrk(const char *s1, const char *s2);s2に含まれるいずれかの文字が、s1内で最初に現れる位置へのポインタを返します。該当する文字が存在しない場合はNULLポインタを返します。
size_t strspn(const char *s1, const char *s2);s1の先頭から、s2に含まれる文字だけが連続して一致する部分の文字数を返します。
size_t strcspn(const char *s1, const char *s2);s1の先頭から、s2に含まれない文字が連続している部分の文字数を返します。
char *strtok(char *s1, const char *s2);s1が指す文字列を、s2が指す文字列中の1つ以上の文字を区切り文字として、一連のトークンに分割します。
char *strtok_r(char *s1, const char *s2, char **lasts);strtok()と同じ機能を持ちますが、呼び出し側が文字列プレースホルダへのポインタlastsを引数として渡す必要がある点が異なります(リエントラント/スレッドセーフ版)。

これらの中でも、strchr()strrchr()が最もシンプルで扱いやすい関数です。

例1:strchr()関数の使用例

以下は、文字列検索関数を使用したC言語プログラムの例です。

#include <string.h>
#include <stdio.h>

void main(){
    char *str1 = "Hello";
    char *ans;
    ans = strchr(str1, 'l');
    printf("%s\n", ans);
}

実行結果

llo

このプログラムでは、strchr()が文字'l'を"Hello"の中から先頭方向へ検索し、見つかった位置へのポインタを返します。実行後、ansはstr1 + 2の位置(3番目の文字)を指すため、printf()の出力は「llo」となります。

例2:strpbrk()関数の使用例

strpbrk()はより汎用的な関数で、複数の文字(文字グループ)のうち、どれか1つが最初に現れる位置を検索します。

#include <string.h>
#include <stdio.h>

void main(){
    char *str1 = "Hello";
    char *ans;
    ans = strpbrk(str1, "aeiou");
    printf("%s\n", ans);
}

実行結果

ello

この例では、母音「aeiou」のいずれかが最初に現れる位置を検索しています。"Hello"の場合、最初の'e'が該当するため、ansはstr1 + 1の位置(最初のe)を指し、出力は「ello」になります。

  1. C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説

    C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,

  2. C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例

    探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探