能看看为何运行不了吗

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
const int n=200; 
int c[n][n];
char str[n];
#define MaxSize 100
typedef struct
{ 
    char data[MaxSize];
    int length;   //串长
}SqString;
void StrAssign(SqString &str,char cstr[]) //str为引用型参数
{
    int i;
    for (i=0;cstr[i]!='\0';i++)
        str.data[i]=cstr[i];
    str.data[i]='\0';
    str.length=i;
}

void GetNextval(SqString t,int nextval[])  //由模式串t求出nextval值
{
    int j=0,k=-1;
    nextval[0]=-1;
    while(j-1 || t.data[j]==t.data[k]) 
        { 
            j++;
            k++;
            if(t.data[j]!=t.data[k]) 
                nextval[j]=k;
            else
                nextval[j]=nextval[k];
        }
        else  k=nextval[k];     
    }

}
int KMPIndex1(SqString s,SqString t,int start)    //修正的KMP算法
{
    int nextval[MaxSize],i=0,j=0;
    GetNextval(t,nextval);
    i=start;
    while(i-1 || s.data[i]==t.data[j]) 
        {
            i=i+1;
            j++; 
        }
        else
            j=nextval[j];
    }
    if (j>=t.length)
        return (i-t.length);
    else
        return -1;
}
int lcs_len(char a[],char b[],int c[][n]) 
{ 
    int sa=strlen(a); 
    int sb=strlen(b); 
    int i,j; 
    for(i=0;i<=sa;i++)
        c[i][0]=0; 
    for(j=0;j<=sb;j++)
        c[0][j]=0; 
    for(i=1;i<=sa;i++) 
    { 
        for(j=1;j<=sb;j++) 
        { 
            if(a[i-1]==b[j-1])
                c[i][j]=c[i-1][j-1]+1; 
            else if(c[i][j-1]> c[i-1][j])
                c[i][j]=c[i][j-1]; 
            else c[i][j]=c[i-1][j]; 
        } 
    } 
    return c[sa][sb]; 
} 
char* bulid_lcs(char a[],char b[]) 
{ 
    int k=0,i,j;
    i=strlen(a);
    j=strlen(b);
    k=lcs_len(a,b,c); 
    str[k]= '\0 '; 
    while(k>0) 
    { 
        if(c[i][j]==c[i-1][j])
            i--; 
        else if(c[i][j]==c[i][j-1])
            j--; 
        else 
        { 
            str[--k]=a[i-1]; 
            i--;
            j--; 
        } 
    } 
    return str; 
} 
void main()
{
    char a[n],b[n],z[n],f[n],change[n]; 
    SqString s,t,st;
    int p[n],q[n],m,i=1,j,j1,j2,k,h,start,flag1,flag2;
    printf("Please enter three strings!\n"); 
    printf("Please enter first string X: "); 
    gets(a); 
    printf("Please enter second string Y: "); 
    gets(b);
    printf("Please the new string Z: "); 
    gets(z);
    StrAssign(s,a);
    StrAssign(t,b);
    StrAssign(st,z);
    start = 0,j1=0;
    flag1=flag2=-1;
    while(1)  //求子串Z在主串X中的所有位置,并记录
    {
        if(start>=s.length)
            break;
        m=KMPIndex1(s,st,start);
        if(m!=-1)
        {
            flag1=1;
            printf("字符串Z在字符串X中第%d次匹配的位置为:%d\n",i++,m);
            p[j1++]=m;
            start = m+st.length;
        }
        else
            break;
    }
    start = 0,j2=0,i=1;
    while(1)  //求子串Z在主串Y中的所有位置,并记录
    {
        if(start>=t.length)
            break;
        m=KMPIndex1(t,st,start);
        if(m!=-1)
        {
            flag2=1;
            printf("字符串Z在字符串Y中第%d次匹配的位置为:%d\n",i++,m);
            q[j2++]=m;
            start = m+st.length;
        }
        else
            break;
    }
    if(flag1==-1 && flag2==-1)
        printf("无法匹配!\n");   //不匹配的时候
    bulid_lcs(a,b);
    if(str[0]==' ')
        printf("这两个字符串没有公共字符串!\n");
    else
    {
        printf("The max length common subsequence is: "); 
        puts(str);   //找出XY的一个最长公共子串
    }
    if(flag1==1 || flag2==1)
    {
        printf("请输入任意的串去置换X和Y中的子串Z:\n");
        gets(change);
        if(flag1==1)  //替换X中的字串Z
        {
            k=0;
            for(i=0;i"%c",a[k]);
                for(j=0;j"%c",change[j]);
                k+=st.length;
            }
            for(;k"%c",a[k]);
            printf("\n");
        }
        if(flag2==1)  //替换Y中的字串Z
        {

            k=0;
            for(i=0;i"%c",b[k]);
                for(j=0;j"%c",change[j]);
                k+=st.length;
            }
            for(;k"%c",b[k]);
            printf("\n");
        }
    }
    system("pause");
}

void GetNextval(SqString t,int nextval[])  //由模式串t求出nextval值
{
    int j=0,k=-1;
    nextval[0]=-1;
    while(j-1 || t.data[j]==t.data[k]) 
        { 
            j++;
            k++;
            if(t.data[j]!=t.data[k]) 
                nextval[j]=k;
            else
                nextval[j]=nextval[k];
        }
        else  k=nextval[k];     
    }

}
int KMPIndex1(SqString s,SqString t,int start)    //修正的KMP算法
{
    int nextval[MaxSize],i=0,j=0;
    GetNextval(t,nextval);
    i=start;
    while(i-1 || s.data[i]==t.data[j]) 
        {
            i=i+1;
            j++; 
        }
        else
            j=nextval[j];
    }
    if (j>=t.length)
        return (i-t.length);
    else
        return -1;
}

这两个函数没发全