這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)C語言中怎么實現(xiàn)模式匹配,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)安陽免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
C語言數(shù)據(jù)結(jié)構(gòu)中串的模式匹配
串的模式匹配問題:樸素算法與KMP算法
#include<stdio.h> #include<string.h> int Index(char *S,char *T,int pos){ //返回字串T在主串S中第pos個字符之后的位置。若不存在,則函數(shù)值為0. //其中,T非空,1<=pos<=StrLength(s). int i=pos; int j=1; while(i<=S[0]&&j<=T[0]){ if(S[i]==T[j]){++i;++j;} else{i=i-j+2;j=1;} } if(j>T[0]) return i-T[0]; else return 0; } int get_next(char *T,int next[]){ //求模式串T的next函數(shù)值并存入數(shù)組next。 int i=1;next[1]=0;int j=0; while(i<T[0]){ if (j==0||T[i]==T[j]){++i;++j;next[i]=j;} else j=next[j]; } return *next; } int Index_KMP(char *S,char *T,int pos){ //利用模式串T的next函數(shù)求T在主串S中第pos個字符之后的位置的KMP算法,其中T非空,1<=pos<=StrLength(S). int next[100]; *next=get_next(T,next); int j=1,i=pos; while(i<=S[0]&&j<=T[0]){ if(j==0||S[i]==T[j]){++i;++j;} else j=next[j]; } if(j>T[0]) return i-T[0]; else return 0; } void main() { int id,j,k,i,a; printf("輸入主串、子串和匹配起始位置\n"); char A[20];char B[10]; printf("請輸入主字串內(nèi)容\n"); gets(A+1); *A=strlen(A+1); printf("請輸入子字串內(nèi)容\n"); gets(B+1); *B=strlen(B+1); printf("請輸匹配起始位置\n"); scanf("%d",&j); //printf("%d ",k); do{ printf("\n請輸入您需要的任務(wù)的序號"); printf("\n1:樸素的模式匹配算法"); printf("\n2:快速模式匹配算法"); printf("\n3:退出\n"); scanf("%d",&id); switch(id){ case 1: {printf("\n\n你調(diào)用了功能1:"); printf("\n樸素的模式匹配算法"); k=Index(A,B,j); printf("\n該位置為:"); printf("%d\n",k); break;} case 2: {printf("\n\n你調(diào)用了功能2:"); printf("\n 快速模式匹配算法"); a=Index_KMP(A,B,j); printf("\n該位置為:"); printf("%d\n",a); break;} case 3: {printf("\n\n你調(diào)用了功能3:"); printf("\n退出\n"); } } }while(id!=3);
#include<stdio.h> #include<string.h> int Index(char *S,char *T,int pos){ //返回字串T在主串S中第pos個字符之后的位置。若不存在,則函數(shù)值為0. //其中,T非空,1<=pos<=StrLength(s). int i=pos; int j=1; while(i<=S[0]&&j<=T[0]){ if(S[i]==T[j]){++i;++j;} else{i=i-j+2;j=1;} } if(j>T[0]) return i-T[0]; else return 0; } int get_next(char *T,int next[]){ //求模式串T的next函數(shù)值并存入數(shù)組next。 int i=1;next[1]=0;int j=0; while(i<T[0]){ if (j==0||T[i]==T[j]){++i;++j;next[i]=j;} else j=next[j]; } return *next; } int Index_KMP(char *S,char *T,int pos){ //利用模式串T的next函數(shù)求T在主串S中第pos個字符之后的位置的KMP算法,其中T非空,1<=pos<=StrLength(S). int next[100]; *next=get_next(T,next); int j=1,i=pos; while(i<=S[0]&&j<=T[0]){ if(j==0||S[i]==T[j]){++i;++j;} else j=next[j]; } if(j>T[0]) return i-T[0]; else return 0; } void main() { int id,j,k,i,a; printf("輸入主串、子串和匹配起始位置\n"); char A[20];char B[10]; printf("請輸入主字串內(nèi)容\n"); gets(A+1); *A=strlen(A+1); printf("請輸入子字串內(nèi)容\n"); gets(B+1); *B=strlen(B+1); printf("請輸匹配起始位置\n"); scanf("%d",&j); //printf("%d ",k); do{ printf("\n請輸入您需要的任務(wù)的序號"); printf("\n1:樸素的模式匹配算法"); printf("\n2:快速模式匹配算法"); printf("\n3:退出\n"); scanf("%d",&id); switch(id){ case 1: {printf("\n\n你調(diào)用了功能1:"); printf("\n樸素的模式匹配算法"); k=Index(A,B,j); printf("\n該位置為:"); printf("%d\n",k); break;} case 2: {printf("\n\n你調(diào)用了功能2:"); printf("\n 快速模式匹配算法"); a=Index_KMP(A,B,j); printf("\n該位置為:"); printf("%d\n",a); break;} case 3: {printf("\n\n你調(diào)用了功能3:"); printf("\n退出\n"); } } }while(id!=3); }
上述就是小編為大家分享的C語言中怎么實現(xiàn)模式匹配了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:C語言中怎么實現(xiàn)模式匹配
地址分享:http://www.rwnh.cn/article0/ghdpoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、商城網(wǎng)站、外貿(mào)建站、ChatGPT、網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)