Enndme· 2023-06-15 15:38 采纳率: 70%
浏览 15
已结题

为什么next这里显示未定义

为什么next这里显示未定义

#include<iostream>
using namespace std;
#include<string.h>

#define MAXLEN 255//串的最大长度 
typedef struct
{
    char ch[MAXLEN+1];//存储串的一维数组 
    int length; //串的当前长度 
 } SString;
 
 void StrAssign(SString &S,char s[])
 {
     S.length=strlen(s);
     for(int i=1;i<=S.length;i++)
     S.ch[i]=s[i-1];
 }
 int Index_BF(SString S, SString T,int pos)
 {
     int i,j;
     i=pos; j=1;
     while(i<=S.length && j<=T.length)
     {
         if(S.ch[i]==T.ch[j])
         {
             ++i;
             ++j;
             
         }
        else
        {
            i=i-j+2;
            j=1;
        }
    }
        if(j>T.length)
        return i-T.length;
        else
        return 0;
 }
 void StrPrint(SString S)
 {
     int i;
     for(i=1;i<=S.length;i++)
     cout<<S.ch[i];
     cout<<endl;
 }
 void get_next(SString T,int next[])
 {
     int i,j;
     i=1;
     next[1]=0;
     j=0;
     while(i<T.length)
     {
         if(j==0||T.ch[i]==T.ch[j])
         {
             i++;
             j++;
             next[i]=j;
         }
        else
        j=next[j];
     }
 }
 void StrDelete(SString &S,SString T,int pos)
 {
     int i,j,k;
     get_next(T,next);
     for(i=pos;i<=S.length-T.length+1;i++)
     {
         k=Index_BF(S,T,1);
         if(k)
         {
             for(j=k;j<=S.length-T.length;j++)
             S.ch[j]=S.ch[j+T.length];
             S.length=S.length-T.length ;
         }
     }
 }
 
 int main(){
     SString S,T;
     int k;
     char string1[MAXLEN],string2[MAXLEN];
     cout<<"输入主序列:";
     gets(string1);
     cout<<"输入子序列:";
    gets(string2);
    StrAssign(S,string1);
    StrAssign(T,string2);
    cout<<"输入起始位置:";
    cin>>k;
    StrDelete(S,T,k);
    cout<<"删除后的主串为:";
    StrPrint(S);
    return 0; 
 }


  • 写回答

2条回答 默认 最新

  • 於黾 2023-06-15 15:41
    关注

    next定义在get_next这个函数里面,是个局部变量
    StrDelete里面没有定义啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月15日