1 /*
2 * 七、数据结构基础之顺序串
3 * 顺序串与顺序表类似,用一组地址连续的存储单元来存储串中的字符序列
4 * --- 2012年4月29日 ---by lee
5 */
6
7 #ifndef _SEQUENTIAL_STRING_H
8 #define _SEQUENTIAL_STRING_H
9
10 #include "Utility.h"
11
12 //宏定义顺序串的空间大小,最多存放20个字符
13 #define STRINGSIZE 21
14
15
16 //声明顺序表类型结构体
17 typedef struct _SqString
18 {
19 char str[STRINGSIZE];//存放数据元素的数组
20 int length;//记录串的实际长度
21 } SqString;
22
23 /* 串匹配算法
24 * 目标串:"t0 t1 t2 ... tn-1" (length=n)
25 * 模式串:"p0 p1 p2 ... pm-1" (m>=1 && m<=n)
26 * 找出模式串P在目标串T中首次出现的有效位移i
27 */
28
29 // 朴素的串匹配算法:
30 // 用一个循环来依次检查i(i>=0 && i<=n-m)是否为有效位移
31 // 匹配成功则返回目标串中的有效位移i,否则返回-1
32 int NaiveMatch(SqString *T, SqString *P)
33 {
34 int n=T->length;//目标串长度
35 int m=P->length;//模式串长度
36 int j,k;
37 //外层循环i控制位移
38 for(int i=0; i<=n-m; i++)
39 {
40 j=0;//j作为模式串P的计数器
41 k=i;//k作为目标串中匹配P的字符串的计数器
42 while((j<m) && (T->str[k]==P->str[j]))
43 {
44 k++;
45 j++;
46 }
47 //j移动到最后,则说明完全匹配
48 if(j==m)
49 {
50 return i;//返回有效位移i
51 }
52 }
53 return -1;
54 }
55
56
57
58
59 #endif