1、实验三 串的应用基本思路;串是非数值运算中的处理的主要对象,如信息检索、文本编辑、符号处理等得到广泛应用。本实验的目的在于让学生有效实现串的处理,这就要求学生熟悉串的存储结构及其基本运算。首先设计出串的定位算法及其实现;然后再利用串的定位算法设计文本的检索及单词的计数等操作。一、串模式匹配算法的设计与实现1、 设计要求:子串的定位就是要求子串在主串中首次出现的位置。称为模式匹配。只要求学生能用最简单的朴素模式算法即可。算法思路为:将给定的子串与主串从第一个字符开始比较,找到首次与子串完全匹配的子串为止,并记住位置。2、 算法分析及设计朴素模式匹配算法:设计需要有三个指针:i、j 、k,用 i
2、批示主串 S 每次开始比较的位置;指针 j 和 k 分别批示主串 S 和模式串 T 中当前正在等待比较的字符位置;一开始从主串 S的第一个字符(i=0,j=0)和模式 T 的第一个字符(k=0 )比较,若相等,则继续逐个比较后续字符(j+,k+ ) ,否则从主串的下一个字符(i+)起重新和模式串(j=0)的字符开始比较。依次类推,直到模式 T 中的所有字符都比较完,而且一直相等,则称匹配成功,并返回位置;否则返回-1,表示失败。int index(sstring S,sstring T)/求子串 T 在主串中首次出现的位置(朴素匹配算法)int i,j,k,m,n;m=T.length;n=S
3、.length;for (i=0;is2.length)return i-s2.length;else return -1;return -1;3、 数据类型的存储表示:#define Maxstrsize 256/字符数组的最大容量Typedef struct Char chMaxstrsize;int length;sstring;/定义顺序串类型4、 参考源代码:#include #include #include /包含串类型 sstring 和朴素模式匹配算法等。void main()int I,j,k;Sstring s1,t1;int wz80;/记录子串的位置i=0;/计数器清
4、零s1.length=strlen(s1.ch);t1.length=strlen(t1.ch);k=0;while(k0)printf(“行号:%d,次数,%d,位置分别为:”,l,i);for (m=1;m#include #include “strpp.h”/包含串类型和匹配函数#include “fun.h”/存储三个函数的头文件void main() void creattextfile(),substrcount(),substrind();int xz;do printf(“*n”);printf(“ 文本处理与统计程序 n”);printf(“*n”);printf(“ 1、建立文本文件 n”);printf(“ 2、单词计数 n”);printf(“ 3、单词定位 n”);printf(“ 4、退出 n”);