第四章:串
文章平均质量分 75
cowoc1961331326
做一题有一题的收获,每次收获一点点
展开
-
定位子串(一)
#include #include int strloc(char str1[],char str2[]); int main() { char str1[5],str2[20]; int loc; while(gets(str2)!=EOF&&gets(str1)!=EOF) { loc=strloc(str1,str2); if转载 2017-05-11 22:58:26 · 1870 阅读 · 0 评论 -
KMP算法Next数组计算
KMP算法是在最近这两年的软件设计师考试中才出现的。2次都是让求Next函数的序列(其实是)。先看看题吧。 (2011年下半年上午题) (2012年上半年上午题) 其实做这个题很简单,我先说说这个题里的各种概念。 给定的字符串叫做模式串T。j表示next函数的参数,其值是从1到n。而k则表示一种情况下的next函数值。p表示其中的某个字符,下标从1开始。看等式左转载 2017-05-19 22:16:20 · 369 阅读 · 0 评论 -
字符串的插入
题目描述 将一个字符串插入到另一个字符串当中。算法描述如下: 图:字符串插入算法 输入 输入包括多个测试样例,每个一行,包括两个字符串(stra,strb)和一个整数 i。字符串仅由英文大小写字母或数字组成。输入的字符串长度不超过127。 输出 将后一个字符串插入到前一个字符串的第i个字符前。输出插入后的结果后换行。 样例输入 strng原创 2017-05-18 21:36:19 · 3313 阅读 · 0 评论 -
字符串的堆分配
为什么需要字符串的堆分配? 因为字符串的顺序存贮结构中,对字符串的操作,在字符串中插入一个子字符串,连接两个字符串以及串的替换操作,度可能会 出现空间的不足,而必须要舍弃部分数据的情况,而数组的空间如果分配的过大,又会浪费内存空间,为了避免顺序存贮结构的 局限性,可以使用动态内存分配的方式来表示串,并实现串的基本操作 什么是堆分配? 通常在函数中定义的变量,转载 2017-05-18 21:34:36 · 985 阅读 · 0 评论 -
字符串链接
将给定的字符串连接起来。书中的算法描述如下: 图:字符串连接算法 输入 输入包括多对字符串,每对字符串占一行,用空格隔开。每个字符串只包含数字和英文字母大小写且长度不超过100。 输出 将后一个字符串连接到前一个字符串后面,如果结果字符串长度超过100,输出一行“Result String is cutted.”否则将结果字符串输出来。原创 2017-05-16 22:51:27 · 1122 阅读 · 0 评论 -
定位子串(二)
题目描述将子串在母串中第一次出现的位置找出来。图1:在母串中第pos个位置定位子串的算法图2:从母串中第pos个位置获得长度为len的子串输入若干对字符串,每对字符串占一行并用一个空格分开。前一个字符串为母串,后者为子串。字符串只包含英文字母的大小写。每个字符串不超过98个字符。输出输出子串在母串中首次出现的位置,如果母串中不包含子串则输出0。每个整数占一行。样例输入ACMCLUB ACM D原创 2017-05-16 19:07:44 · 1742 阅读 · 1 评论 -
KMP算法中的模式串移动数组
题目描述 字符串的子串定位称为模式匹配,模式匹配可以有多种方法。简单的算法可以使用两重嵌套循环,时间复杂度为母串与子串长度的乘积。而KMP算法相对来说在时间复杂度上要好得多,为母串与子串长度的和。但其算符比较难以理解。 在KMP算法中,使用到了一个next数组。这个数组就是在比较失配时母串指针不必回溯,而子串指针移动相应位置即可。我们给出书中next数组的算式表示以及算法,请你实现之。原创 2017-05-21 22:55:47 · 1927 阅读 · 0 评论 -
KMP字符串模式匹配算法实现
题目描述 KMP算法是字符串模式匹配算法中较为高效的算法之一,其在某次子串匹配母串失败时并未回溯母串的指针而是将子串的指针移动到相应的位置。严蔚敏老师的书中详细描述了KMP算法,同时前面的例子中也描述了子串移动位置的数组实现的算法。前面你已经实现了子串移动的数组,现在就来利用该数组来实现KMP模式匹配。 下面是相应的算法: 图:KMP算法 输入 3组字符串,每组字原创 2017-05-21 22:57:25 · 1016 阅读 · 0 评论