算法不知道出现了什么问题

-

SqString.h
#include 
#include 
#include 
#include 
#define MAXSIZE 100
#define ElemType char

using namespace std;

typedef struct 
{
    ElemType data[MAXSIZE];
    int length;
}SqString;

//初始化
void  InitIndex(SqString &s){

    s.length=0;
}

//BF
int Index(SqString &s,SqString &t){
    int i=0,j=0;
    while(iif(s.data[i]==t.data[j]){
            i++;
            j++;
        }else{
            i=i-j+1;
            j=0;
        }
    }
    if(j>=t.length){
        return (i-t.length);
    }else{
        return (-1);
    }
}

//next
void GetNext(SqString &t,int next[]){
    int j=0,k=-1;
    next[0]=-1;
    while(j-1){
        if(k==-1||t.data[j]==t.data[k]){
            j++;
            k++;
            next[j]=k;
        }else{
            k=next[k];
        }
    }
} 

//KMP
int KMPIndex(SqString &s,SqString &t){
    int i=0,j=0,next[MAXSIZE];
    GetNext(t,next);
    while(iif(j==-1||s.data[i]==t.data[j]){
            j++;
            i++;
        }else{
            j=next[j];
        }
    }
    if(j>=t.length){
        return (i-t.length);
    }else{
        return (-1);
    }
}




#include 
#include "SqString.h"

using namespace std;

int main() {
    SqString s,t;
    int a,a1,i;
    ElemType e1,e2;
    
    InitIndex(s);
    InitIndex(t);
    
    cout<<"请输入主串个数:"<>a;
    for(i=0;i"请输入主串的元素:";
        cin>>e1;
        s.data[i]=e1;
        
    }
    
    
    for(i=0;i"  ";

    }
    cout<"请输入子串个数:"<>a1;
    for(i=0;i"请输入子串的元素:";
        cin>>e2;
        t.data[i]=e2;
    }
    for(i=0;i"  ";
        
    }
    cout<"采用BF算法"<"第一个匹配的字符下标为:";
    Index(s,t);
    cout<"采用KMP算法"<"第一个匹配的字符下标为:";
    KMPIndex(s,t);
    return 0;
}


两个问题,一是你没有给s和t的length赋值啊
二是你调用Index(s,t)后,要获得它的返回值,然后如果返回值大于等于0,表示有匹配项,然后输出这个返回值

SqString.h
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
#define MAXSIZE 100
#define ElemType char
 
using namespace std;
 
typedef struct 
{
    ElemType data[MAXSIZE];
    int length;
}SqString;
 
//初始化
void  InitIndex(SqString &s){
 
    s.length=0;
}
 
//BF
int Index(SqString &s,SqString &t){
    int i=0,j=0;
    while(i<s.length&&j<t.length){
        if(s.data[i]==t.data[j]){
            i++;
            j++;
        }else{
            i=i-j+1;
            j=0;
        }
    }
    if(j>=t.length){
        return (i-t.length);
    }else{
        return (-1);
    }
}
 
//next
void GetNext(SqString &t,int next[]){
    int j=0,k=-1;
    next[0]=-1;
    while(j<t.length-1){
        if(k==-1||t.data[j]==t.data[k]){
            j++;
            k++;
            next[j]=k;
        }else{
            k=next[k];
        }
    }
} 
 
//KMP
int KMPIndex(SqString &s,SqString &t){
    int i=0,j=0,next[MAXSIZE];
    GetNext(t,next);
    while(i<s.length&&j<t.length){
        if(j==-1||s.data[i]==t.data[j]){
            j++;
            i++;
        }else{
            j=next[j];
        }
    }
    if(j>=t.length){
        return (i-t.length);
    }else{
        return (-1);
    }
}
 
 
 
 
#include <iostream>
#include "SqString.h"
 
using namespace std;
 
int main() {
    SqString s,t;
    int a,a1,i;
    ElemType e1,e2;
    
    InitIndex(s);
    InitIndex(t);
    
    cout<<"请输入主串个数:"<<endl; 
    cin>>a;
    for(i=0;i<a;i++){
        cout<<"请输入主串的元素:";
        cin>>e1;
        s.data[i]=e1;
    }
    s.length = a;
    
    for(i=0;i<a;i++){
        cout<<s.data[i]<<"  ";
 
    }
    cout<<endl;
    
    
    cout<<"请输入子串个数:"<<endl; 
    cin>>a1;
    for(i=0;i<a1;i++){
        cout<<"请输入子串的元素:";
        cin>>e2;
        t.data[i]=e2;
    }
    t.length = a1;
    for(i=0;i<a1;i++){
        cout<<t.data[i]<<"  ";
        
    }
    cout<<endl;
    
    cout<<"采用BF算法"<<endl;
    cout<<"第一个匹配的字符下标为:";
    int n = Index(s,t);
    if(n>=0)
        cout<<n;
    cout<<endl;
    
    cout<<"采用KMP算法"<<endl;
    cout<<"第一个匹配的字符下标为:";
    n = KMPIndex(s,t);
    if(n>=0)
        cout<<n<<endl;
    return 0;
}
 
 

有啥异常现象啊?

101.109 ,111行输出符你少打了一个。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632