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

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

  1. 有意思的字符串查找函数strchr,strrchr,strstr,strrstr

    通过一段时间对字符串的了解,我发现了许多有意思的字符串函数,下面我们就以常见的字符串查找函数:strchr,strrchr,strstr,strrstr为例来模拟实现这些有意思的字符串查找函数吧! [ ...

  2. C语言用函数字符串的查找,字符串查找函数,C语言字符串查找函数详解

    在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结. 使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行 ...

  3. linux c语言不区分大小写查找,c语言字符串查找不分大小写

    夜影驱动编程小编今天和大家分享 C语言不区分字符串大小写的比较函数 strcmp() int stricmp(const char*, const char*); 这个是大小写不敏感的字符串比较函数 ...

  4. strchr函数-----c语言字符串查找函数

    strchr函数 返回第一次出现字符c的地址,要用指针去接收 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<s ...

  5. 【 C 】字符串查找基础笔记

    目录 查找一个字符 查找任何几个字符 查找一个字串 strrstr的自定义编写实践 strrpbrk的自定义编写实践 标准库中有很多函数,它们用各种不同的方法查找字符串.下面分别介绍: 先介绍标准库中 ...

  6. C语言字符串处理函数 strchr()和 strstr()的区别及使用

    简介: 字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数.本文主要介绍 C语言中符串处理函数 strchr()和 strs ...

  7. C语言字符串处理的一些函数strok,strstr, strchr,strsub

    字符串切割函数 函数原型:char *strtok(char *s, char *delim); 函数功能:把字符串s按照字符串delim进行分割,然后返回分割的结果. 函数使用说: 1.strtok ...

  8. C语言 字符串 查找并替换

    编译环境:VS2010. 语言: C. 代码: #include <stdlib.h> #include <stdio.h> #include <string.h> ...

  9. c 语言字符串查找替换,c ++ - 如何在标准字符串中搜索/查找和替换?

    c ++ - 如何在标准字符串中搜索/查找和替换? 有没有办法用std::string中的另一个字符串替换所有出现的子字符串? 例如: void SomeFunction(std::string&am ...

最新文章

  1. tf keras SimpleRNN源码解析
  2. 深度学习基础2(反向传播算法)
  3. 高性能 高可用 可弹性伸缩_性能,可伸缩性和活力
  4. xampp浏览php出现乱码,dvwa+xampp搭建显示乱码的问题及解决方案
  5. vue如何配置服务器端跨域_vue项目里如何配置本地代理实现跨域请求
  6. linux perl开发工具,专家推荐 几款常用Perl开发工具
  7. 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
  8. 如何啃透周志华的《机器学习》西瓜书?
  9. 对外提供dubbo服务的最佳实践
  10. 如何使用Enigma Recovery检查设备未设置为加密备份
  11. SpringMVC结合ajaxfileupload文件无刷新上传
  12. 让kbmmw 4.8 支持ios 64
  13. FAT文件系统详解(二)
  14. java中时间类型转换_java中时间类型转换
  15. 游戏防外挂、破解解决方案
  16. Resolve operation not in progress, we are not resuming.
  17. MP3 ID3v1 ID3v2 APEv2 标准总结
  18. 【安全资讯】《网络产品安全漏洞管理规定》出台,漏洞披露者的紧箍咒?
  19. 带 SPI 接口的独立 CAN 控制器,SIT2515
  20. Unity3D 判断鼠标向左还是向右滑动

热门文章

  1. Pycharm 破解补丁启动不了的坑
  2. 使用python pandas读取csv文件数据
  3. 传说对决显示无法连接服务器,传说对决 -Arena of Valor-总是显示无法连接网络
  4. gt911 1024*600配置表
  5. python系列之简单太极图
  6. Visio绘图转.eps矢量图(转换后绝对是矢量图,缩放无失真)原创
  7. 登录状态保持(cookie+session和token)
  8. Netlify搭建个人博客设置域名
  9. [Mysql] 删除数据
  10. 屏蔽罩对蓝牙模块的影响