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;
}
Beispiel #2
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);
}
Beispiel #4
0
 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");
 }
Beispiel #5
0
int search( char * S, char * T)
{
	tem = Index_KMP(S,T, tem);
		printf("%d ",tem );
		return tem;
}
Beispiel #6
0
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;
}