C strpbrk() 函数

C strpbrk() 语法

strpbrk() 是 C 语言 <string.h> 标准库的一个函数,用于在第一个字符串中查找 “任何一个” 在第二个字符串(一个字符集合)中出现的字符的 “第一次出现位置” 。

通俗点来说就是,strpbrk() 就是问:“告诉我,在第一个字符串里,我最早在哪里遇到了第二个字符串里的任何一个字符?”

语法:

strpbrk(str1, str2)

说明:

strpbrk() 函数接收以下 2 个参数。

  • str1(const char*):要搜索的字符串的指针。
  • str2(const char*):包含 “要查找的字符集合” 的字符串的指针。strpbrk() 函数会在 str1 中查找 str2 中任意一个字符的第一次出现的位置。

strpbrk(str1, str2) 会从 str1 的第一个字符开始,逐个检查字符。对于 str1 中的每个字符,它会检查该字符是否出现在 str2 定义的字符集合中。如果在 str1 中找到了第一个属于 str2 字符集合的字符,搜索就停止。

strpbrk() 函数会返回一个指向在 str1 中找到的 “第一个匹配字符” 的指针。

  • 如果在 str1 中找到了任何一个在 str2 中的字符,那么 strpbrk() 会返回一个指向 str1 中该字符位置的指针。
  • 如果在 str1 中没有找到任何一个在 str2 中的字符(直到 str1 的终止符 '\0'),那么 strpbrk() 返回 NULL。

提示: strpbrk 是 “string pointer to a break” 的缩写。

C strpbrk() 摘要

使用频率
修改字符串
官方文档 查看

C strpbrk() 示例

接下来,我们通过几个简单的例子来讲解一下 C strpbrk() 函数是如何使用的。

示例 1:strpbrk() 查找字符串中第一个元音字母的位置

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

int main(void)
{
    const char str[] = "lvyenet";
    const char vowels[] = "aeiouAEIOU"; // 要查找的字符集合:元音字母

    char *result = strpbrk(str, vowels);
    if (result != NULL) {
        printf("第一个元音字母:'%c'\n", *result);
        printf("所在索引: %td\n", result - str);
    } else {
        printf("未能找到元音字母\n");
    }

    return 0;
}

运行结果如下。

第一个元音字母:'e'
所在索引 : 3

分析:

在这个例子中,我们使用 strpbrk() 来查找字符串 "lvyenet" 中第一个出现的元音字母。strpbrk() 函数会遍历字符串,一直到 'e'。由于 'e' 属于元音字母集合,因此会返回指向 'e' 的指针

示例 2:strpbrk() 查找字符串中第一个数字或标点符号的位置

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

int main(void)
{
    const char str[] = "Time: 2025-05-20 13:14:30";
    const char break_chars[] = "0123456789.,/";       // 要查找的字符集合:数字、点号、逗号、斜杠

    char *result = strpbrk(str, break_chars);

    if (result != NULL) {
        printf("第一个数字或标点符号: '%c'\n", *result);
        printf("所在索引:%td\n", result - str);
    } else {
        printf("未找到任何数字或标点符号\n");
    }

    return 0;
}

运行结果如下。

第一个数字或标点符号 : '2'
所在索引:6

分析:

这里我们尝试使用 strpbrk() 查找字符串中第一个属于多个字符集合中的任意一个字符。strpbrk() 在找到 '2' 时停止,并返回指向该位置的指针。

示例 3:字符串中不包含任何要查找的字符

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

int main(void)
{
    const char str[] = "abcdefg";
    const char search_chars[] = "xyz";  // 查找 x, y, z

    const char *result = strpbrk(str, search_chars);
    if (result != NULL) {
        printf("第一个匹配字符:'%c'\n", *result);
        printf("所在索引:%td\n", result - str);
    } else {
        printf("未找到任何字符\n");
    }

    return 0;
}

运行结果如下。

未找到任何字符

分析:

对于 strpbrk() 来说,如果被搜索的字符串中不包含任何一个要查找的字符时,那么就会返回 NULL。

strpbrk() 的应用场景

在实际开发中, strpbrk() 函数主要用于以下场景:

  • 查找字符串中分隔符的第一个出现位置。
  • 跳过字符串开头或中间的特定字符序列。
  • 解析字符串,找到特定类型字符(如数字、字母、标点符号)的起始位置。
  • 结合其他字符串函数来提取或处理字符串的片段。

strpbrk() 可以看作是 strchr() 的 “增强版”。其中,strchr() 用于查找单个字符的第一次出现,而 strpbrk() 用于查找多个字符中任意一个的第一次出现。

上一篇: strstr()

下一篇: strspn()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号