#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MAXSIZE 100
using namespace std;
#define N 100
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef char ElemType;
typedef int Status;
typedef struct //串的堆式顺序存储结构
{
char *ch; //若是非空串,则按串长分配存储区,否则ch为NULL
int length; //串的当前长度
}HString;
//00 初始化
Status InitString(HString &H)
{
H.ch=new ElemType [MAXSIZE];
H.ch[0]='O';
if(!H.ch) exit(OVERFLOW);
H.length=0;
return OK;
}
//01 创建串
Status CreateString (HString &H,int len)
{
char x;
for(int i=1;i<=len;i++)
{
cin>>x;
H.ch[i]=x;
}
H.length=len;
return OK;
}
Status DisPlay(HString &H)
{
printf("打印串:") ;
for(int i=1;i<=H.length;i++)
{
printf("%c",H.ch[i]);
}
printf("\n");
return OK;
}
//02 实现BF模式匹配算法
int Index_BF(HString S,HString T,int &pos)
{
int i=1,j=1,sum=0;
while(i<=S.length && j<=T.length)//两个串均比较到末尾
{
sum++;
if(S.ch[i]==T.ch[j])
{
++i;
++j;//继续比较后继字符
}
else //指针退后重新开始比较
{
i=i-(j-1)+1;
j=1;
}
}
cout<<"BF一共比较了"<<sum<<"次"<<endl ;
if(j>T.length)
{
pos=i-T.length;
return i-T.length;//匹配成功
}
else return 0;//匹配失败
}
//03 实现KMP模式匹配算法
int Index_KMP(HString S,HString T,int &pos,int next[])
{
int i=1;
int j=1;
int sum=0;
while(i<=S.length && j<=T.length)//两个串均比较到末尾
{
sum++;
if(j==0||S.ch[i]==T.ch[j])
{
++i;++j;//继续比较后继字符
}
else
j=next[j];
}
cout<<"KMP一共比较了"<<sum<<"次"<<endl ;
if(j>T.length)
{
pos=i-T.length;
return i-T.length;//匹配成功
}
else return 0;//匹配失败
}
void get_next(HString T,int next[])
{
next[1]=0;
int m,j;
m=0; //m=next[1],m代表的是前缀结束时的下标,也就是相似度,T1...Tm(m个字符)
j=1; //j代表的是后缀末尾的下标,Tj-m+1...Tj(m个字符) ++j后即所求next[j]
while(j<T.length)
{
if(m==0||T.ch[m]==T.ch[j])
{
++m;++j;
next[j]=m;
}
else //匹配失败,则回溯
m=next[m];//若是字符不相同,则m回溯
}
}
void get_nextval(HString T,int nextval[])//求模式串T中的next函数修正值,并存入数组nextval
{
int i=1,j=0;
nextval[1]=0;
while(i<T.length)
{
if(j==0||T.ch[i]==T.ch[j])
{
++i;++j;
if(T.ch[i]!=T.ch[j])
nextval[i]=j;
else nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
int main()
{
int m,n,pos;
HString H,S,T;
int next[N];
int nextval[N];
//00 初始化
InitString(S);
InitString(T);
//01 创建串S
printf("创建的串长为:");
scanf("%d",&m);
printf("键入串S:");
CreateString(S,m);
DisPlay(S);
//01 创建串T
printf("创建的串长为:");
scanf("%d",&n);
printf("键入串T:") ;
CreateString(T,n);
DisPlay(T);
//02 实现BF模式匹配算法
Index_BF(S,T,pos);
printf("BF:模式T在主串S中 第%d个 字符开始第一次出现\n",pos) ;
//03 实现KMP模式匹配算法
get_next(T,next);
Index_KMP(S,T,pos,next);
printf("KMP:模式T在主串S中 第%d个 字符开始第一次出现\n",pos) ;
//04 实现KMP模式匹配 改进算法
get_nextval(T,nextval);
Index_KMP(S,T,pos,nextval);
printf("KMP(改进):模式T在主串S中 第%d个 字符开始第一次出现\n",pos) ;
}

你这个问题还多着呢,可以告诉你出现CCCCCCCC说明你这个值还没有被赋值过,是一开始系统初始化的值
修改见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MAXSIZE 100
using namespace std;
#define N 100
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef char ElemType;
typedef int Status;
typedef struct //串的堆式顺序存储结构
{
char* ch; //若是非空串,则按串长分配存储区,否则ch为NULL
int length; //串的当前长度
}HString;
//00 初始化
Status InitString(HString& H)
{
H.ch = new ElemType[MAXSIZE+1];//修改
H.ch[0] = 'O';
if (!H.ch) exit(OVERFLOW);
H.length = 0;
return OK;
}
//01 创建串
Status CreateString(HString& H, int len)
{
char x;
for (int i = 1; i <= len; i++)
{
cin >> x;
H.ch[i] = x;
}
H.length = len;
return OK;
}
Status DisPlay(HString H) //Status DisPlay(HString& H)
{
printf("打印串:");
for (int i = 1; i <= H.length; i++)
{
printf("%c", H.ch[i]);
}
printf("\n");
return OK;
}
//02 实现BF模式匹配算法
int Index_BF(HString S, HString T, int& pos)
{
int i = 1, j = 1, sum = 0;
while(i<=S.length && j<=T.length)
{
sum++;
if (S.ch[i] == T.ch[j])
{
++i;
++j;//继续比较后继字符
}
else //指针退后重新开始比较
{
i = i - (j - 1) + 1;
j = 1;
}
}
cout << "BF一共比较了" << sum << "次" << endl;
if (j > T.length)
{
pos = i - T.length;
return OK; //匹配成功 //修改
}
else {
pos = -1; //修改
return ERROR; //修改 匹配失败
}
}
//03 实现KMP模式匹配算法
int Index_KMP(HString S, HString T, int& pos, int next[])
{
int i = 1;
int j = 1;
int sum = 0;
while (i <= S.length && j <= T.length)//两个串均比较到末尾
{
sum++;
if (j == 0 || S.ch[i] == T.ch[j])
{
++i; ++j;//继续比较后继字符
}
else
j = next[j];
}
cout << "KMP一共比较了" << sum << "次" << endl;
if (j > T.length)
{
pos = i - T.length;
return OK;//匹配成功 修改
}
else {
pos = -1; //修改
return ERROR;//匹配失败 修改
}
}
void get_next(HString T, int next[])
{
next[1] = 0;
int m, j;
m = 0; //m=next[1],m代表的是前缀结束时的下标,也就是相似度,T1...Tm(m个字符)
j = 1; //j代表的是后缀末尾的下标,Tj-m+1...Tj(m个字符) ++j后即所求next[j]
while (j < T.length)
{
if (m == 0 || T.ch[m] == T.ch[j])
{
++m; ++j;
next[j] = m;
}
else //匹配失败,则回溯
m = next[m];//若是字符不相同,则m回溯
}
}
void get_nextval(HString T, int nextval[])//求模式串T中的next函数修正值,并存入数组nextval
{
int i = 1, j = 0;
nextval[1] = 0;
while (i < T.length)
{
if (j == 0 || T.ch[i] == T.ch[j])
{
++i; ++j;
if (T.ch[i] != T.ch[j])
nextval[i] = j;
else
nextval[i] = nextval[j];
}
else j = nextval[j];
}
}
int main()
{
int m, n, pos1,pos2,pos3; //修改
HString H, S, T;
int next[N];
int nextval[N];
//00 初始化
InitString(S);
InitString(T);
//01 创建串S
printf("创建的串长为:");
scanf("%d", &m);
printf("键入串S:");
CreateString(S, m);
DisPlay(S);
//01 创建串T
printf("创建的串长为:");
scanf("%d", &n);
printf("键入串T:");
CreateString(T, n);
DisPlay(T);
//02 实现BF模式匹配算法
Index_BF(S, T, pos1); //修改
printf("BF:模式T在主串S中 第%d个 字符开始第一次出现\n", pos1);
//03 实现KMP模式匹配算法
get_next(T, next);
Index_KMP(S, T, pos2, next); //修改
printf("KMP:模式T在主串S中 第%d个 字符开始第一次出现\n", pos2);
//04 实现KMP模式匹配 改进算法
get_nextval(T, nextval);
Index_KMP(S, T, pos3, nextval); //修改
printf("KMP(改进):模式T在主串S中 第%d个 字符开始第一次出现\n", pos3);
return 0;
}