串及其应用
串及其应用——文学研究助手
实验三
安庆师范学院2012计算机卓越班
安庆师范学院2012计算机卓越班
PAGE 1 / NUMPAGES 7
数
数 据 结 构
课
程
实
验
报
告
姓名:
姓名:陈东
学号:070612146
目 录
TOC \o "1-3" \h \z \u 一、【实验目的】 3
二、【问题描述】 3
三、【基本要求】 3
四、【实验环境】 3
五、【测试数据及其结果】 3
六、【实验源代码】 5
一、【实验目的】
本次实习的主要目的是熟悉串类型的实现方法和文本模式匹配方法,熟悉一般文学处理软件的设计方法,较复杂问题的分解求精方法。
二、【问题描述】
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个是实现这一目标的文字统计系统,称为“文学研究助手”。
三、【基本要求】
英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行数,格式自行设计。
四、【实验环境】
Windows7, VC++6.0
五、【测试数据及其结果】
以自己的C源程序模拟英文小说,C语言的保留字集作为待统计的词汇集。
六、【实验源代码】
#include
#include
#include
#define MAXSTRLEN 255
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef char HString[MAXSTRLEN+1];
typedef int status;
int next[MAXSTRLEN];
char *chars;
typedef struct{
char *ch;
int length;
}SString;
char* ToString(char array[], int array_size)//字符数组转换成字符串
{
char *p;
int i;
p = (char*)malloc(array_size + 1);
for(i = 0; i < array_size; i++)
{
*(p+i) = '0' + array[i];
}
*(p+i) = '\0';
return p;
}
status StrAssign(SString &T,char *chars)//生成一个其值等于串常量chars的串T
{
int i;
int j;
char *c;
for(i=0,c=chars;*c!='\0';++i,++c);
if(!i)
{
T.ch=NULL;
T.length=0;
}
else
{
if(!(T.ch=(char *)malloc(i *sizeof(char))))
exit(OVERFLOW);
for(j=0;j
{
T.ch[j]=chars[j];
}
T.length=i;
}
return OK;
}
void get_next(SString T,int next[])//求next值
{
int j=1,k=0;
next[1]=0;
while(j
{
if(k==0||T.ch[k-1]==T.ch[j-1])
{
++j;
++k;
next[j]=k;
}
elsek=next[k];
}
}
int Index(SString S,SString T,int pos)//匹配算法kmp
{
int i=pos,j=1;
while(i!=S.length+1&&j!=T.length+1)
{
if(j==0||S.ch[i-1]==T.ch[j-1])
{
j++;i++;
}
else
j=next[j];
}
if(j>T.length-1)
return (i-T.length);
else
return 0;
}
void find(SString keys)//查找单词
{
status StrAssign(SString &T,char *chars);
int count=0;