Namespaces
Variants

strpbrk

From cppreference.net
< c ‎ | string ‎ | byte
定義先ヘッダ <string.h>
char * strpbrk ( const char * dest, const char * breakset ) ;
(1)
/*QChar*/ * strpbrk ( /*QChar*/ * dest, const char * breakset ) ;
(2) (C23以降)
1 ) 終端ナルバイト文字列 dest が指す文字列を、 breakset が指す終端ナルバイト文字列中の任意の文字が現れるまで走査し、その文字へのポインタを返します。
2) 型ジェネリック関数で (1) と同等の機能を持つ。 T を修飾子のない文字オブジェクト型とする。
  • dest の型が const T * の場合、戻り値の型は const char * となる。
  • それ以外の場合、 dest の型が T * の場合、戻り値の型は char * となる。
  • それ以外の場合、動作は未定義となる。
これらのジェネリック関数のマクロ定義が抑制され、実際の関数にアクセスする場合(例えば ( strpbrk ) が使用される場合、または関数ポインタが使用される場合)、実際の関数宣言 (1) が可視となる。

dest または breakset のいずれかがヌル終端バイト文字列へのポインタでない場合、動作は未定義です。

目次

パラメータ

dest - 解析対象のヌル終端バイト文字列へのポインタ
breakset - 検索対象の文字を含むヌル終端バイト文字列へのポインタ

戻り値

dest 内の最初の文字へのポインタで、 breakset 内にも存在するもの、またはそのような文字が存在しない場合はヌルポインタ。

注記

この名前は「string pointer break」を意味します。これは、セパレータ(「区切り」)文字の最初の文字へのポインタを返すためです。

#include <stdio.h>
#include <string.h>
int main(void)
{
    const char* str = "hello world, friend of mine!";
    const char* sep = " ,!";
    unsigned int cnt = 0;
    do
    {
       str = strpbrk(str, sep); // セパレータを検索
       if(str) str += strspn(str, sep); // セパレータをスキップ
       ++cnt; // 単語カウントをインクリメント
    }
    while(str && *str);
    printf("There are %u words\n", cnt);
}

出力:

There are 5 words

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.24.5.4 strpbrk関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.24.5.4 strpbrk関数 (p: 未定)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.24.5.4 strpbrk関数 (p: 368)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.21.5.4 strpbrk関数 (p: 331)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.11.5.4 strpbrk関数

関連項目

別のバイト文字列に見つからない文字のみで構成される
最大の先頭セグメントの長さを返す
(function)
文字の最初の出現を検索する
(function)
バイト文字列内の次のトークンを検索する
(function)