当前位置: 首页 > news >正文

漳州市网站建设公司百度制作的wordpress工具

漳州市网站建设公司,百度制作的wordpress工具,网站建设代理平台,网页设计素材网站花超详细讲解字符串查找函数(保姆级教程!!!)字符串查找函数strstr函数strstr函数的使用strstr函数的模拟实现strtok函数strtok函数的使用strtok函数的模拟实现strpbrk函数strpbrk函数的使用strpbrk函数的模拟实现strcspn…

超详细讲解字符串查找函数(保姆级教程!!!)

  • 字符串查找函数
    • strstr函数
      • strstr函数的使用
      • strstr函数的模拟实现
    • strtok函数
      • strtok函数的使用
      • strtok函数的模拟实现
    • strpbrk函数
      • strpbrk函数的使用
      • strpbrk函数的模拟实现
    • strcspn函数
      • strcspn函数的使用
      • strcspn函数的模拟实现
    • strspn函数
      • strspn函数的使用
      • strspn函数的模拟实现

字符串查找函数

strstr函数

在这里插入图片描述
strstr函数是在字符串 str1 中查找第一次出现字符串 str2的位置,不包含终止符 ‘\0’。
str1 – 要被检索的 C 字符串。
str2 – 在 str1 字符串内要搜索的小字符串。

strstr函数的使用

下面是strstr函数的使用例子:

/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{char str[] ="This is a simple string";char * pch;pch = strstr (str,"simple");strncpy (pch,"sample",6);puts (str);return 0;
}

strstr函数的模拟实现

要在str1中查找str2并打印出来,先判断str1和str2指向的字符是否相等,此时有两种情况:
第一种情况指向的字符不相等,str1要指向下一个字符,再判断,如此循环往复,当str1指向的是 ‘\0’ 时,可以判断出str1中不存在str2,此时返回NULL;
第二种情况下指向的字符相等,那么不仅str1要向后读取字符,str2也要向后读取字符,再判断是否相等。
在这里插入图片描述
strstr函数的模拟实现如下:

char *  strstr (const char * str1, const char * str2) {char *cp = (char *) str1;char *s1, *s2;if ( !*str2 )return((char *)str1);while (*cp){s1 = cp;s2 = (char *) str2;while ( *s1 && *s2 && !(*s1-*s2) )s1++, s2++;if (!*s2)return(cp);cp++;}return(NULL);

而实现strstr函数,除了上述的偏暴力算法的模拟实现方式之外,还可以通过KMP算法进行实现。
KMP算法:Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。
算法的核心思想是:
假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置
如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++,继续匹配下一个字符;
如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]。此举意味着失配时,模式串P相对于文本串S向右移动了j - next [j] 位。
具体的KMP算法思想编者会另行写一篇文章向大家大致阐述,这里就不多在赘述,有兴趣的读者可以去了解一下。

strtok函数

在这里插入图片描述
char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
str – 要被分解成一组小字符串的字符串。
delim – 包含分隔符的 C 字符串。
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

strtok函数的使用

下面演示strtok函数的用法:

#include <string.h>
#include <stdio.h>int main () {char str[80] = "This is - www.xxxxx.com - website";const char s[2] = "-";char *tmp;tmp = strtok(str, s);while( tmp != NULL ) {printf( "%s\n", tmp );tmp = strtok(NULL, s);}return(0);
}

编译并运行上面的程序将产生以下结果:
This is
www.xxxxx.com
website
原字符串的改动是切分符原位置均更改为 ‘\0’,所以内容都还在
strtok函数具有以下的特点:

1、delim参数是个字符串,定义了用作分隔符的字符集合
2、第一个参数指定一个字符串,它包含了0个或者多个由delim字符串中一个或者多个分隔符分割的标记。
3、strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。
4、strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。
5、strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
中的位置。
6、strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
7、如果字符串中不存在更多的标记,则返回 NULL 指针。

strtok函数的模拟实现

char* my_strtok(char* str, const char* sep)
{static char* s1 = NULL;static char* s2 = NULL;static int len1 = 0;static int count = 0;int len2 = 0;int i = 0;assert(sep != NULL);if (str != NULL)               {s1 = str;                        len1 = strlen(str);len2 = strlen(sep);for (*str;*str != '\0';str++)        {for (i = 0;i < len2;i++)             {if (i == 0){count++;}if (*str == *(sep + i))       {*str = '\0';           s2 = str;               return s1;}}}}else{s1 = s2 + 1;                        len2 = strlen(sep);str = s1;                         for (*str;*str != '\0';str++)       {for (i = 0;i < len2;i++)           {if (i == 0){count++;}if (*str == *(sep + i))      {*str = '\0';       s2 = str;return s1;}}}}if (count > len1){return NULL;}return s1;
}

strpbrk函数

在这里插入图片描述
char *strpbrk(const char *str1, const char *str2) 检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
str1 – 要被检索的 C 字符串。
str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。

strpbrk函数的使用

下面展示strpbrk函数的使用:

#include <stdio.h>
#include <string.h>int main ()
{const char str1[] = "abcde2fghi3jk4l";const char str2[] = "34";char *ret;ret = strpbrk(str1, str2);if(ret) {printf("第一个匹配的字符是: %c\n", *ret);}else {printf("未找到字符");}return(0);
}

强调的是,找的是str1中,str2的第一个匹配的内容的地址。

strpbrk函数的模拟实现

char* find_char(char const* str1, char const* str2)
{assert(str1 != NULL);assert(str2 != NULL);char* tmp = (char*)str2;while (*tmp != '\0'){char* pso = (char*)str1;while (*pso != '\0'){if (*pso != *tmp){++pso;}else{return pso;}}tmp++;}return 0;
}

strcspn函数

在这里插入图片描述

size_t strcspn(const char *str1, const char *str2) 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
str1 – 要被检索的字符串。
str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。

strcspn函数的使用

下面演示strcspn函数的用法:

#include <stdio.h>
#include <string.h>int main ()
{int len;const char str1[] = "ABCDEF4960910";const char str2[] = "013";len = strcspn(str1, str2);printf("第一个匹配的字符是在 %d\n", len + 1);return(0);
}

编译并运行上面的程序将产生以下结果:
第一个匹配的字符是在 10

strcspn函数的模拟实现

size_t my_strcspn(const char* str1, const char* str2)
{int i = 0;char* pstr1 = (char*)str1;assert(NULL != str1);assert(NULL != str2);while (*pstr1){char* pstr2 = (char*)str2;while (*pstr2 && *pstr1 != *pstr2)++pstr2;if (*pstr1 == *pstr2)break;++pstr1;}return (pstr1 - str1);
}

strspn函数

在这里插入图片描述
size_t strspn(const char *str1, const char *str2) 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
str1 – 要被检索的字符串。
str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。该函数返回 str1 中第一个不在字符串 str2 中出现的字符下标。

strspn函数的使用

下面演示 strspn函数的用法:

#include <stdio.h>
#include <string.h>int main ()
{int len;const char str1[] = "ABCDEFG019874";const char str2[] = "ABCD";len = strspn(str1, str2);printf("初始段匹配长度 %d\n", len );return(0);
}

编译并运行上面的程序将产生以下结果:
初始段匹配长度 4

strspn函数的模拟实现

size_t my_strspn(const char* str1, const char* str2)
{int i = 0;char* pstr1 = (char*)str1;assert(NULL != str1);assert(NULL != str2);while (*pstr1){char* pstr2 = (char*)str2;while (*pstr2 && *pstr1 != *pstr2)++pstr2;if (*pstr1 == *pstr2)break;++pstr1;}return (pstr1 - str1);
}

那么,今天的C语言 柔性数组的使用详解的相关内容我就讲述完啦,因为个人能力有限,文章难免会出现纰漏,届时有错误可以私信发给我以及时更正,谢谢大家!
请添加图片描述

http://www.yayakq.cn/news/701183/

相关文章:

  • 巴南城乡建设网站app模板下载网站模板
  • 界面设计优秀的网站有哪些北京网站设计公司飞沐
  • 连云港企业做网站北京宏福建设有限公司网站
  • 网站管理系统模板博物馆建设网站的目的及功能
  • 文山做女主播的在哪个网站汪峰做的音乐网站
  • 成都设计公司工装seo在线诊断工具
  • 企业网站建设的优势网站设计 线框图
  • 房子网站有哪些北京网站设计制作多少钱
  • 网站怎么做微信支付官方网站查询 优帮云
  • 做图片类型网站需要什么服务器怎么在百度推广自己的公司
  • 网络营销的网站分类有哪些企业应加强自身网站建设
  • 刚开始做写手上什么网站河南省网站
  • 阿里云做网站买什么软件搜索网站做推广
  • 泰州企业网站建设制作h5页面的工具有哪些
  • 怎么查询网站是否被降权骗子会利用钓鱼网站做啥
  • 青岛企业网站制作哪家好上海广告投放公司
  • 做网络网站需要三证么网站主体备案号
  • 广州大型网站建设公司排名彩票网站开发的
  • 单页网站在线生成创建全国文明城市倡议书
  • ppt素材网站建设流程图电子工程王北辰
  • 如何将网站建设得更好网站电子商务类型
  • 承德市建设局网站珠峰网站建设
  • 莱芜二手房网站十大电商平台有哪些
  • 电子商务网站有哪些网络系统的价值跟用户数量成正比
  • 清华紫光是可以做网站的吗wordpress官网地址
  • 科技公司网站推荐高质量的赣州网站建设
  • 做网站游戏总结的例文seo营销技巧培训班
  • 建大型网站要多少钱都是做面食网站
  • seo的工作内容深圳谷歌seo培训班
  • 可以做微网站的第三方平台如何去掉 wordpress