#include<stdio.h>
#include<string.h>
#define MAXSIZE 50
void get_next(char form[],int next[]){
int i = 0,j = -1;
next[0] = -1;
while(form[i] != '\0'){
if(j == -1 || form[i] == form[j] )
i++;
j++;
next[i] = j;
}
else j = next[j];
}
}
int kmp(char form[],char main[],int next[]){
int i = 0,j = 0;
while(form[j] != '\0' && main[i] != '\0'){
if(j == -1 || main[i] == form[j]){
i++;
j++;
}
else j = next[j];
}
if(form[j] == '\0'){
printf("匹配成功\n");
return i - j;
}
else return -1;
}
int main(){
char main[MAXSIZE];
char form[MAXSIZE];
printf("輸入主串\n");
gets(main);
printf("輸入模式串\n");
gets(form);
int length = strlen(form);
int next[length];
get_next(form,next);
int x = kmp(form,main,next);
if(x != -1){
printf("匹配成功\n匹配到的位置為%d",x);
}
else printf("匹配不成功\n");
}
uj5u.com熱心網友回復:
void get_next(char form[],int next[]){
int i = 0,j = -1;
next[0] = -1;
while(form[i] != '\0'){
if(j == -1 || form[i] == form[j] )
i++;
j++;
next[i] = j;
}
else j = next[j];
}
}代碼有語法錯誤,編譯不會通過,所以運行更不可能。
else和那個if匹配,并且還多一個右大括號.先解決了編譯錯誤再考慮運行的問題吧~
uj5u.com熱心網友回復:
謝謝指正,這可能是我復制粘貼時候不小心刪了一個括號,原來的代碼是有括號的,能夠編譯通過
uj5u.com熱心網友回復:
#include<stdio.h>#include<string.h>
#define MAXSIZE 50
void get_next(char form[],int next[]){
int i = 0,j = -1;
next[0] = -1;
while(form[i] != '\0'){
if(j == -1 || form[i] == form[j]){
i++;
j++;
next[i] = j;
}
else j = next[j];
}
}
int kmp(char form[],char main[],int next[]){
int i = 0,j = 0;
while(form[j] != '\0' && main[i] != '\0'){
if(j == -1 || main[i] == form[j]){
i++;
j++;
}
else j = next[j];
}
if(form[j] == '\0'){
return i - j;
}
else return -1;
}
int main(){
char main[MAXSIZE];
char form[MAXSIZE];
printf("輸入主串\n");
gets(main);
printf("輸入模式串\n");
gets(form);
int length = strlen(form);
int next[length];
get_next(form,next);
int x = kmp(form,main,next);
if(x != -1){
printf("匹配成功\n匹配位置為%d",x);
}
else printf("匹配不成功\n");
}
這是我新粘貼的



uj5u.com熱心網友回復:
void get_next ( char form[], int next[] ){
int i=0, j= -1;
next[0] = -1;
...
if ( j== -1 || form[i] == form[j] )
...
我有點不明白!!從C語言來理解的話~~~這里j=-1;那么怎么確定form[j]在訪問時的正確性?form[-1]這個位置???
uj5u.com熱心網友回復:
而且~~~if陳述句里j==-1;一定是真!后面的哪個判斷沒有實在意義,無論真偽都是真!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8126.html
標籤:C語言
