From 8996daa6aabc8f13b37af0e0479bc57847847b3d Mon Sep 17 00:00:00 2001 From: zhilv Date: Mon, 24 Nov 2025 17:53:26 +0800 Subject: [PATCH] =?UTF-8?q?fear(datastructure.test5):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=9E=E9=AA=8C=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataStructure/test5/实验五.cpp | 119 +++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 DataStructure/test5/实验五.cpp diff --git a/DataStructure/test5/实验五.cpp b/DataStructure/test5/实验五.cpp new file mode 100644 index 0000000..f05755b --- /dev/null +++ b/DataStructure/test5/实验五.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +int nextval[20]; + +int BF(char a[], char b[]) +{ + int i = 1; + int j = 1; + while (i <= strlen(a) && j <= strlen(b)) + { + // todo list ±È½ÏÊý×éa¡¢bÀï¶ÔӦλÖõÄ×Ö·û£º + // ÈôÆ¥Åä³É¹¦£¬Ôò¼ÌÐø±È½ÏºóÐø×Ö·û£» + // ÈôÆ¥Åä²»³É¹¦£¬iÖ¸Õë¡¢jÖ¸Õë»ØÍË£¬ÖØÐ¿ªÊ¼Æ¥Åä + if (a[i - 1] == b[j - 1]) + { + i++, j++; + } + else + { + i = i - j + 2; + j = 1; + } + } + if (j > strlen(b)) + { + printf("BFË㷨ƥÅä³É¹¦\n"); + // todo list //·µ»ØºÍģʽbÖеÚÒ»¸ö×Ö·ûÏàµÈµÄ×Ö·ûÔÚÖ÷´®aÖеÄÐòºÅ + return i - strlen(b); + } + else + { + printf("BFË㷨ƥÅäʧ°Ü\n"); + return 0; + } +} + +void Nextval(char b[]) +{ + nextval[1] = 0; + int i = 1, j = 0; + // todo list while Ñ­»·Çónextval + while (i < strlen(b)) + { + if (j == 0 || b[i - 1] == b[j - 1]) + { + i++; + j++; + if (b[i - 1] != b[j - 1]) + { + nextval[i - 1] = j; + } + else + { + nextval[i - 1] = nextval[j - 1]; + } + } + else + { + j = nextval[j - 1]; + } + } +} + +int KMP(char a[], char b[]) +{ + int i = 1, j = 1, k; + Nextval(b); // Çób´®ÖÐËùÓÐ×Ö·ûµÄnextvalÖµ + for (k = 1; k <= strlen(b); k++) + { + printf("nextval[%d]Ϊ£º%4d\n", k, nextval[k]); + } + while (i <= strlen(a) && j <= strlen(b)) + { + // todo list ±È½ÏÊý×éa¡¢bÀï¶ÔӦλÖõÄ×Ö·û£º + // ÈôÆ¥Åä³É¹¦£¬Ôò¼ÌÐø±È½ÏºóÐø×Ö·û£» + // ÈôÆ¥Åä²»³É¹¦£¬ÀûÓÃnextval[j]ʵÏÖjÖ¸Õë»ØÍË£¬ÖØÐ¿ªÊ¼Æ¥Åä + if (j == 0 || a[i - 1] == b[j - 1]) + { + i++; + j++; + } + else + { + j = nextval[j - 1]; + } + } + if (j > strlen(b)) + { + printf("KMPË㷨ƥÅä³É¹¦£¡\n"); + // todo list //·µ»ØºÍģʽbÖеÚÒ»¸ö×Ö·ûÏàµÈµÄ×Ö·ûÔÚÖ÷´®aÖеÄÐòºÅ + return i - strlen(b); + } + else + { + printf("KMPË㷨ƥÅäʧ°Ü£¡\n"); + return 0; + } +} + +int main() +{ + char a[100], b[20]; + printf("ÇëÊäÈëÖ÷´®:\n"); + scanf("%s", a); + + // gets_s(a); + printf("ÇëÊäÈë×Ó´®:\n"); + scanf("%s", b); + + // gets_s(b); + printf("------------------------------------\n"); + int num_BF, num_KMP; + num_BF = BF(a, b); + printf("BF:×Ó´®µÄµÚÒ»¸ö×Ö·ûÔÚÖ÷´®ÖеÄλÖÃΪ£º%d\n", num_BF); + printf("------------------------------------\n"); + num_KMP = KMP(a, b); + printf("KMP:×Ó´®µÄµÚÒ»¸ö×Ö·ûÔÚÖ÷´®ÖеÄλÖÃΪ£º%d", num_KMP); +}