C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr()

2023-05-16

1、查找一个字符
在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数,原型如下所示:

char *strchr(char const *str, int ch);
char *strrchr(char const *str,int ch);

注意:它们的第二个参数是一个整型值。但是,它包含了一个字符值。strchr返回字符第一次出现的位置,strrchr返回字符最后一次出现的位置。找到后函数返回指向该位置的指针,否则返回NULL。

char string[20] = "hello world";
char *ans;
ans = strchr(string,'w');

ans所指向的位置将是string+6。注意这里大小写是有区别的。

2、查找任何几个字符
strpbrk查找任何一组字符第一次在字符串中出现的位置,函数原型如下:

char *strpbrk(char const *str, char const *group);

这个函数返回一个指向str中第1个匹配group中任何一个字符的字符位置,如果未找到就返回NULL指针。

char string[20] = "hello world";
char *ans;
ans = strpbrk(string,'aeiou');

ans指向的位置是string+1,因为这个位置是第2个参数中的字符第一次出现的位置。这个函数也区分大小写。

3、查找一个子串
在一个字符串查找一个子串,可以使用strstr函数,原型如下:

char *strstr(char const *s1, char const *s2);

这个函数在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针。如果s2并没有完整地出现在s1的任何地方,返回NULL指针。如果第2个参数是一个空字符串,函数就返回s1。

注意:标准库中并不存在strrstr或者strrpbrk,但是其很容易实现。下面程序实现strrstr函数。相同的技巧可用于实现strrpbrk。


#include<string.h>

char *my_strrstr(char const *s1,char const *s2)
{
    register char *last;
    register char *current;;

    last = NULL;
    /*第2个参数不为空才查找*/
    if(*s2 != '\0')
    {
        current  = strstr(s1,s2);
    /*每次找到字符串时,让指针指向它的起始位置,然后查找该字符串下一个匹配位置*/
        while(current != NULL)
        {
            last = current;
            current = strstr(last+1,s2);
        }
    }
    return last;
}

字符串查找

s.find(s1)         //查找s中第一次出现s1的位置,并返回(包括0)

s.rfind(s1)        //查找s中最后次出现s1的位置,并返回(包括0)

s.find_first_of(s1)       //查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)

s.find_last_of(s1)       //查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)

s.fin_first_not_of(s1)         //查找s中第一个不属于s1中的字符的位置,并返回(包括0)

s.fin_last_not_of(s1)         //查找s中最后一个不属于s1中的字符的位置,并返回(包括0)

字符串截取

s.substr(pos, n)    //截取s中从pos开始(包括0)的n个字符的子串,并返回

s.substr(pos)        //截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回

序号函数 & 描述
1void *memchr(const void *str, int c, size_t n)
在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
2int memcmp(const void *str1, const void *str2, size_t n)
把 str1 和 str2 的前 n 个字节进行比较。
3void *memcpy(void *dest, const void *src, size_t n)
从 src 复制 n 个字符到 dest
4void *memmove(void *dest, const void *src, size_t n)
另一个用于从 src 复制 n 个字符到 dest 的函数。
5void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
6char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
7char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
8char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
9int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
10int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字节。
11int strcoll(const char *str1, const char *str2)
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
12char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest
13char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
14size_t strcspn(const char *str1, const char *str2)
检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
15char *strerror(int errnum)
从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。
16size_t strlen(const char *str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
17char *strpbrk(const char *str1, const char *str2)
检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
18char *strrchr(const char *str, int c)
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
19size_t strspn(const char *str1, const char *str2)
检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
20char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
21

char *strtok(char *str, const char *delim)
分解字符串 str 为一组字符串,delim 为分隔符。

 

#include <stdio.h>
#include <string.h>
 
 
int main()
{
   const char haystack[20] = "RUNOOB";
   const char needle[10] = "NOOB";
   char *ret;
 
   ret = strstr(haystack, needle);
 
   printf("子字符串是: %s\n", ret);
   
   return(0);
}
#include <string.h>
#include <stdio.h>
 
int main () {
   char str[80] = "This is - www.runoob.com - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr() 的相关文章

  • strchr()函数

    如果需要对字符串中的单个字符进行查找 xff0c 那么应该使用 strchr 或 strrchr 函数 其中 xff0c strchr 函数原型的一般格式如下 xff1a char strchr const char s int c 它表示
  • 详解strstr函数:查找子字符串函数及其模拟实现

    详解strstr函数 xff1a 在一个字符串中查找另一共字符串是否存在 xff01 对于strstr查找子字符串 xff0c 笔者如果不是对C语言学习的更加深入 xff0c 可能还是不知道有这个函数 xff01 xff01 xff01 之
  • strchr()、strrchr()、strchrnul()…

    头文件 xff1a include 函数原型 xff1a char strchr char str int c char strrchr char str int c define GNU SOURCE 头文件 xff1a include
  • 模拟实现strchr,strrchr,strstr,strrstr函数

    模拟实现strchr strnchr strstr strrstr函数 strchr 查找字符串s中首次出现字符c的位置 xff0c 返回首次出现c的位置的指针 xff0c 如果s中不存在c则返回NULL include lt stdio
  • strchr, strrchr, strchrnull

    名字 strchr strrchr strchrnul 在字符串中定位一个字符 概要 include lt string h gt char strchr const char s int c char strrchr const char
  • C语言strstr函数

    函数strstr定义 xff1a char strstr const char str1 const char str2 xff1b 位于头文件 string h 中 作用 xff1a strstr函数用于判断字符串str2是否为字符串st
  • C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr()

    1 查找一个字符 在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数 xff0c 原型如下所示 xff1a char strchr char const str int ch char strrchr char
  • strpbrk函数

    strpbrk函数 1 函数功能 xff1a strpbrk是在源字符串 xff08 s1 xff09 中找出最先含有搜索字符串 xff08 s2 xff09 中任一字符的位置并返回 xff0c 若找不到则返回空指针 2 头文件 span
  • strpbrk

    头文件 xff1a include lt include h gt strpbrk 函数检索两个字符串中首个相同字符的位置 xff0c 其原型为 xff1a char strpbrk char s1 char s2 参数说明 s1 s2要检
  • C/C++库函数strstr和find实现子字符串查找

    1 子字符串查找实现Demo include
  • C/C++实现strstr函数、KMP算法查找子串

    C C 实现strstr KMP算法查找子串 目录 C C 实现strstr KMP算法查找子串 1 字符串形式 2 字节流形式 1 字符串形式 代码实现 char my strstr const char src const char d
  • strstr() 在 gcc 和 VS 中的实现是否具有线性复杂度?

    我知道有快速的字符串搜索算法 例如博耶 摩尔 and 高德纳 莫里斯 普拉特 其复杂度为 O n m 而普通解决方案为 O n m 那么 最流行的工具链 gcc 和 Visual Studio 的 strstr 实现是使用这些快速 O n
  • strstr 的纯字节版本?

    是否有一个 strstr 版本可以在可能包含空字符的固定长度内存上工作 我可以这样表达我的问题 strncpy 与 memcpy 的关系与 strstr 的关系相同 memmem 不幸的是它是 GNU 特定的而不是标准 C 但是 它是开源的
  • 在 PHP 开关中使用 strstr

    我只是想不出代码 我有太多 if 语句 我想将其更改为 switch 语句 但我找不到逻辑 目前我有 if strstr var texttosearch echo string contains texttosearch if strst
  • PHP中获取字符串的第一行

    在 PHP 5 3 中有一个不错的功能 http www php net manual en function strstr php这似乎做我想做的 strstr input n true 不幸的是 服务器运行 PHP 5 2 17 和可选
  • strstr() 的参数计数错误

    我已经使用帖子 GUID 和帖子标题在 WordPress 中构建了一个导航菜单 我只获取标题的一部分 为此我正在执行以下操作 casestudylist li class subnav a href strstr v gt post ti
  • 当给定“const char *”作为第一个参数时,为什么 C 标准库函数“strchr”返回指向非常量的指针?

    使用 gcc g 成功编译给定的代码示例 没有错误strchr调用 这显然分配了const char to char 我发现了strchr被声明为char strchr const char int 在两个不同的来源pubs opengro
  • 如何在 C 语言中找到字符串中字符的索引?

    假设我有一个字符串 qwerty 我希望找到的索引位置e其中的人物 在这种情况下 索引将是2 我如何在 C 中做到这一点 我找到了strchr函数 但它返回一个指向字符的指针而不是索引 只需从 strchr 返回的内容中减去字符串地址即可
  • strstr 不工作

    如果我输入 test 为什么这段特定的代码在 strstr 上返回 false char input 100 int main fgets input 100 stdin printf s input if strstr test mess
  • 查找输入字符串中的子字符串

    我有这个汇编程序 我需要在我输入的主字符串中找到子字符串 我的问题是 即使我输入了两个完全不同的单词 它总是输出 找到的单词 我不知道我的循环或条件的哪一部分是错误的 请帮我弄清楚 另外 请建议一些可用于检查子字符串的字符串指令 以便我可以

随机推荐

  • u-center配置GPS的使用说明

    承接上篇 HERE 43 RTK GPS用于自创地面站的过程记录 xff0c 本文主要讲解u center如何配置HERE 43 RTK GPS xff08 一般的gps同此方法一样 xff09 基本配置可先查看网址 xff1a http
  • 对云台、IMU、鲁棒性和硬件时间同步的理解

    作者 xff1a 朱金灿 来源 xff1a clever101的专栏 为什么大多数人学不会人工智能编程 xff1f gt gt gt slam是一门集硬件和软件的多科学技术 xff0c 涉及到很多技术术语 概念以及数学公式等等 下面我将结合
  • QT无人机地面站设计与制作随笔总结

    自己不是专职地面站设计 xff0c 这里简单将经验叙述下 xff08 另外把自己一直空缺着的QT分类补一篇文章 xff09 无论是处于地面站学习的过程还是做项目进行重新整体设计 xff0c 对于这种写代码的过程最好先在MindMaster中
  • 矩阵该左乘还是右乘

    首先说明一点 xff0c 矩阵具有几何意义 xff0c 对于这几何意义的具体理解可看B站的 线性代数的本质 的视频讲解 开始展开议题 为理解记忆这个问题 xff0c 可以从方向余弦矩阵开始着手 xff0c 方向余弦矩阵是由三次旋转矩阵顺序乘
  • 《绿皮书》影评

    以一种看经典的心态看这部电影 xff0c 确实这部电影没有让我失望 很经典 xff0c 很深刻 xff0c 可能每个人都有各自的认知 xff0c 各自的感受 而我感受到了主人公如同城市孤独人的孤独感 或许 xff0c 遭受肉体上的折磨和伤害
  • Cannot find module 'body-parser'

    bug Cannot find module 39 body parser 39 原因很明显 xff0c 这个模块是没有的 xff0c 查看node modules目录下 xff0c 确实没有 解决办法 xff1a 重新安装这个模块 xff
  • gitlab安装和使用--让我们的版本管理可视化

    一 安装环境 xff1a centos6 7实验2G xff0c 生产4G安装包下载 xff08 需要翻墙 xff0c 不然下载很慢 xff09 xff1a https packages gitlab com gitlab gitlab c
  • STM32CubeMX基本使用

    视频 https www bilibili com video BV11t41147wc from 61 search amp seid 61 9347368692610984203 前言 在配置好CubeMX之后 xff0c 就是新建工程
  • make 命令

    https www ibm com support knowledgecenter zh ssw aix 71 com ibm aix cmds3 make htm 用途 维护 更新和重新生成程序组 语法 make DVariable d
  • Opencv求轮廓的中心点坐标

    Opencv求轮廓的中心点坐标 思路 xff1a 1 通过findContours找出图片中的轮廓 xff1b 2 minAreaRect找到最小外接矩形 xff1b 3 得到最小外接矩形的中心点坐标作为轮廓的中心坐标 xff1b cv s
  • 路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(四)

    路由器二次开发一步一步把工业路由器变成一个高端的可指定出网 节点和链路的路由器 包含详细过程及快捷脚本 四 如果没有 路由器 可以采用 废旧的电脑 详细环境部署参考第 一 篇文章 这里采用800米的工业路由器j1900进行二次定制开发 可以
  • 路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(五)

    路由器二次开发一步一步把工业路由器变成一个高端的可指定出网 节点和链路的路由器 包含详细过程及快捷脚本 五 如果没有 路由器 可以采用 废旧的电脑 详细环境部署参考第 一 篇文章 这里采用800米的工业路由器j1900进行二次定制开发 可以
  • 应用windows批处理嵌套复制文件夹

    作者 xff1a 朱金灿 来源 xff1a clever101的专栏 为什么大多数人学不会人工智能编程 xff1f gt gt gt 应用windows批处理文件将一个文件夹下的多个子文件夹复制到另一个文件夹下 xff0c 代码如下 xff
  • FreeRTOS代码剖析之4:内存管理Heap_4.c

    FreeRTOS8 0 1内存管理的最后一个堆模型Heap 4 xff0c 貌似是在这一个版本才有的 所以找到的说明几乎没有 代码的开头注释也只是简单地说了一下实现了pvPortMalloc 和vPortFree 两个函数 xff0c 并且
  • 如何在 Ubuntu 上安装 Python 3.8

    Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 Python是世界上使用最广泛的编程语言之一 xff0c 由于其简单易学的语法 xff0c Python是初学者和有经验的开发者的热门选择 xff0c Python是一种相
  • (三)OpenCV中的图像处理之轮廓

    注释 xff1a 本文翻译自OpenCV3 0 0 document gt OpenCV Python Tutorials xff0c 包括对原文档种错误代码的纠正 该章节分为以下四个小节 xff1a 一 Contours xff1a Ge
  • Arduino UNO+ESP8266 WIFI+USB转TTL连接线使用EDP协议控制LED灯

    Arduino是许多智能硬件爱好者的首选 xff0c 使用简单快捷 xff0c 而ESP8266模块也是当前最为热门的WIFI模块 本项目完成了Arduino使用EDP协议通过ESP8266 WIFI模块接入OneNET服务器 xff0c
  • 智工运维定位器之ublox

    一 xff0c 概述 GNSS芯片选用了ublox的 UBX M8030 系列 xff0c 有3个型号 xff1a 可以到官网去下载相关资料 xff0c 文档还挺齐的 xff1a https www u blox com zh produc
  • Arduino修改Serial接收缓冲区大小

    Arduino串口默认只接收64字节到缓冲区 xff0c 之后接收到的数据直接丢弃 xff0c 那么在发送 接收不同步的情况下 xff0c 传输数据过大就会丢数据了 xff01 并且当数据超过64字节后 xff0c 是丢弃后面的数据 xff
  • C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr()

    1 查找一个字符 在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数 xff0c 原型如下所示 xff1a char strchr char const str int ch char strrchr char