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
转载于:https://www.cnblogs.com/programlee/archive/2012/05/05/2485120.html