int main() { SString mainstr = "aaabaaaab"; unsigned char *chars = (unsigned char *)"aaaab"; unsigned char *chstemp = chars; int len = 0; while(*chstemp){ len ++; chstemp++; } int temp = len; int temp2 = len; SString paternstr; paternstr[0] = len; unsigned char *p = paternstr + 1; unsigned char *ch = chars; while(temp) { *p++ = *ch++; temp--; } *p = '\0'; int *next =(int *)malloc(MAXSTRLEN * sizeof(int)); get_next(paternstr, next); //get_next2(paternstr, next); while(len) { printf("%d\n", next[len]); len--; } printf("\n%d\n",Index_KMP(mainstr, paternstr, 1, next)); int *nextval = (int *)malloc(MAXSTRLEN * sizeof(int)); get_nextval(paternstr, nextval); while(temp2) { printf("%d\n", nextval[temp2]); temp2--; } printf("\n%d\n", Index_KMP(mainstr, paternstr, 1, nextval)); return 0; }
int main() { char str[100]; char c[100]; printf("请输入文本串:\n"); scanf("%s", str); printf("请输入模式串:\n"); scanf("%s", c); printf("%d\n", Index_KMP(str, c, 0)); return 0; }
void testStringIndex() { printf("input the main string:\n"); SString S; CreateString(S); PrintString(S); printf("input the sub string:\n"); SString S2; CreateString(S2); PrintString(S2); printf("general matching algirothm:\n"); int pos = Index(S, S2, 1); printf("the position of the substring in the main string is: %d\n", pos); printf("kmp matching algirothm:\n"); pos = Index_KMP(S, S2, 1); printf("the position of the substring in the main string is: %d\n", pos); }
void ALGO4_1_main() { int i,j,*p; SString s1,s2; // 以教科书中图4.5为例 StrAssign(s1,"acabaabaabcacaabc"); printf("主串为: "); StrPrint(s1); StrAssign(s2,"abaabcac"); printf("子串为: "); StrPrint(s2); i=StrLength(s2); p=(int*)malloc((i+1)*sizeof(int)); // 生成s2的next数组 get_next(s2,p); printf("子串的next函数为: "); for(j=1;j<=i;j++) printf("%d ",*(p+j)); printf("\n"); i=Index_KMP(s1,s2,1,p); if(i) printf("主串和子串在第%d个字符处首次匹配\n",i); else printf("主串和子串匹配不成功\n"); }
int search( char * S, char * T) { tem = Index_KMP(S,T, tem); printf("%d ",tem ); return tem; }
int main() { int i, *p; String s1, s2; StrAssign(s1, "ababaaaba"); StrAssign(s2, "ababaaaba"); Index_KMP(s1, s2, 0); StrAssign(s1, "abcdex"); printf("子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf("Next为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "abcabx"); printf("子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf("Next为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "ababaaaba"); printf("子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf("Next为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "aaaaaaaab"); printf("子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf("Next为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "ababaaaba"); printf(" 子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf(" Next为: "); NextPrint(p, StrLength(s1)); get_nextval(s1, p); printf("NextVal为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "aaaaaaaab"); printf(" 子串为: "); StrPrint(s1); i = StrLength(s1); p = (int*)malloc((i + 1)*sizeof(int)); get_next(s1, p); printf(" Next为: "); NextPrint(p, StrLength(s1)); get_nextval(s1, p); printf("NextVal为: "); NextPrint(p, StrLength(s1)); printf("\n"); StrAssign(s1, "00000000000000000000000000000000000000000000000001"); printf("主串为: "); StrPrint(s1); StrAssign(s2, "0000000001"); printf("子串为: "); StrPrint(s2); printf("\n"); printf("主串和子串在第%d个字符处首次匹配(朴素模式匹配算法)\n", Index(s1, s2, 1)); printf("主串和子串在第%d个字符处首次匹配(KMP算法) \n", Index_KMP(s1, s2, 1)); printf("主串和子串在第%d个字符处首次匹配(KMP改良算法) \n", Index_KMP1(s1, s2, 1)); return 0; }