C语言KMP无回溯模式匹配算法,第五讲字符串模式匹配.ppt

第五讲字符串模式匹配

作业:课程网站下载环境。 13号前提交 * 字符串与模式匹配 2016-3-11 胡俊峰 主要内容 C语言的字符串操作(复习) 字符串的抽象数据类型 模式匹配算法 字符串概念 字符串简称串,是一种特殊的线性表,其特殊性主要在于表中的每个元素是一个字符。 一个串可以记作s="s0s1…sn-1"(n ≥ 0),其中s是串的名字,双引号括起来的字符序列s0s1…sn-是串的值。 例如: A = "123"B = "ABBABBC"C = "BB"D = "BB "E = "" 字符数组与字符串 由字符串构成的线性表 C语言中定义的字符串 存储结构: 字符指针 … \0 操作: ?char *strcpy(char *dst, char *sorc) int strcmp(char *str1, char *str2);? char* strcat(char *dest, const char* sorc,size); char* strstr(char *str, const char *strSearch); size_t strlen(const char* str); gets(char *); puts(char*); Strstr()函数 char *strstr(char *str1, char *str2); #include #include int main(void){??? char str1[] ="aaaabcabcdabcbabcdryf", *str2 = "abc", *ptr;ptr = str1;??? while((ptr = strstr(ptr, str2))!=NULL)??????? printf("The substring is: %s\n", ptr++);??? return 0; } String createNullStr (void) 创建一个空串。 int IsNullStr ( String s ) 判断串s是否为空串,若为空串,则返回1,否则返回0。 int length ( String s ) 返回串s的长度。 String concat (String s1, Sting s2 ) 返回将串s1和s2拼接在一起构成的一个新串。 String subStr (String s, int i, int j ) 在串s中,求从串的第i个字符开始连续j个字符所构成的子串。 int index (String s1, String s2 ) 如果串s2是s1的子串,则可求串s2在串s1中第一次出现的位置。 字符串ADT 顺序结构字符串 struct SeqString { /* 顺序串的类型 */ int MAXNUM; /* 串允许的最大字符个数 */ int n; /* 串的长度,n?MAXNUM */ char *c; }; typedef struct SeqString *PSeqString; 顺序串示例 s = “abcdefg” a b c d e f g s.n = 7 s.c 0 1 2 3 4 5 6 MAXNUM-1 创建顺序结构空串 PSeqString createNullStr_seq( int m ) { PSeqString pstr = (PSeqString)malloc(sizeof(structSeqString)); if (pstr != NULL) { pstr->c = (char* )malloc(sizeof (char)*m); if (pstr->c != NULL) { pstr->n = 0; pstr->MAXNUM = m; return (pstr) } else free (pstr); } printf("Out of space!!\n"); return NULL; } struct SeqString { int MAXNUM; int n;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 简单字符串模式匹配算法:也称为朴素字符串匹配算法,是一种基础的字符串匹配算法。它的思想是从主的第一个字符开始,依次比较主和模式中对应位置的字符是否相等,如果相等则继续比较,直到模式中所有字符都匹配成功,或者有一个字符不匹配为止。如果不匹配,则将主的起始位置向后移动一位,重新开始匹配。该算法的时间复杂度为O(m*n),其中m和n分别为主和模式的长度。 2. 首位字符串模式匹配算法:也称为BF算法(Brute Force),是一种改进的字符串匹配算法。它的思想是在简单字符串模式匹配算法的基础上,当发现主中某个字符与模式中的某个字符不匹配时,不是将主的起始位置向后移动一位,而是将模式的起始位置向前移动到上一次比较成功的位置之后的下一位,继续匹配。这样可以减少比较次数,提高匹配效率。该算法的时间复杂度为O(m*n),其中m和n分别为主和模式的长度。 3. KMP字符串模式匹配算法:是一种高效的字符串匹配算法。它的核心思想是利用模式自身的特性,预处理出一个next数组,使得在匹配过程中,当出现不匹配的情况时,可以通过next数组中的信息,跳过一部分比较,从而提高匹配效率。具体实现方法是,在预处理next数组时,从模式的开头开始,计算出每个位置对应的最长前缀和最长后缀的公共部分长度,保存在next数组中。在匹配过程中,当出现不匹配的情况时,根据next数组中的信息,将模式的起始位置向后移动一定的距离,从而跳过一些比较。该算法的时间复杂度为O(m+n),其中m和n分别为主和模式的长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值