問題出現在KMPIndex函式的while回圈里。
我輸入的測驗資料是:
abbabcjhabbabbcd
abbabb
不知道為什么,當j變成-1的時候就自動跳出while回圈體了,導致結果錯誤。而我只是將strlen(i和j)變成一個整形變數,程式就運行成功了。
這是KMPIndex函式更改的部分:
int i,j;
i=0,j=0;
int tlen=strlen(t),slen=strlen(s);
while(i<slen&&j<tlen){
if(j==-1||s[i]==t[j]){
i++;
j++;
}
else{
j=next[j];
}
}
這是更改前的函式:
void getnext(char t[],int next[]){
int j,k;
j=0;
k=-1;
next[0]=-1;
int d=strlen(t);
while(j<strlen(t)-1){
if(k==-1||t[j]==t[k]){
j++;
k++;
next[j]=k;
}
else{
k=next[k];
}
}
}
這是更改前的整個函式:
#include <stdio.h>
#include <string.h>
void getnext(char t[],int next[]){
int j,k;
j=0;
k=-1;
next[0]=-1;
int d=strlen(t);
while(j<strlen(t)-1){
if(k==-1||t[j]==t[k]){
j++;
k++;
next[j]=k;
}
else{
k=next[k];
}
}
}
void KMPIndex(char t[],char s[],int next[]){
int i,j;
i=0,j=0;
while(i<strlen(s)&&j<strlen(t)){//問題所在
if(j==-1||s[i]==t[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>=strlen(t)){
printf("%d",i-strlen(t));
}
else printf("ERROR");
}
int main(){
char t[101],s[1001];
int next[100];
scanf("%s %s",s,t);
getnext(t,next);
KMPIndex(t,s,next);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266061.html
標籤:C語言
上一篇:C# ? 關于將字符轉化為整數
下一篇:求大佬給改一下
