scanf(\ fp=fopen(fname,\
yn='n';//输入结束标志初值 while(yn=='n'||yn=='N')
{printf(\请输入一行文本:\gets(S.ch);gets(S.ch); S.length=strlen(S.ch); fwrite(&S,S.length,1,fp); fprintf(fp,\
printf(\结束输入吗?y or n :\ fclose(fp);//关闭文件 printf(\建立文件结束!\ }
void SubStrCount()
{char a[7]={',','.',';','!','?',' ','\\n'}; FILE *fp;
SString S,T;//定义两个串变量 char fname[10]; int i=0,j,k;
printf(\输入文本文件名:\ scanf(\ fp=fopen(fname,\
printf(\输入要统计计数的单词:\ scanf(\
T.length=strlen(T.ch);
while(!feof(fp)){ //扫描整个文本文件 memset(S.ch,'\\0',256);
fgets(S.ch,256,fp); //读入一行文本 S.length=strlen(S.ch); k=0; //初始化开始检索位置
while(k { if(match(a,7,S.ch[T.length])) i++;//单词计数器加1 k=j+T.length;//继续下一字串的检索 } else {if(match(a,7,S.ch[j-1])&&match(a,7,S.ch[j+T.length])) i++;//单词计数器加1 k=j+T.length;//继续下一字串的检索 } } } printf(\单词%s在文本文件%s中共出现%d次\\n\}//统计单词出现的个数 void SubStrInd() {char a[7]={',','.',';','!','?',' ','\\n'}; FILE *fp; SString S,T; char fname[10]; int i,j,k,l,m; int wz[20]; printf(\输入文本文件名:\scanf(\fp=fopen(fname,\ printf(\输入要检索的单词:\scanf(\ T.length=strlen(T.ch); l=0; while(!feof(fp)) { memset(S.ch,'\\0',256); fgets(S.ch,256,fp); S.length=strlen(S.ch); l++; k=0; i=0; while(k if(match(a,7,S.ch[T.length])) {i++; wz[i]=j;} k=j+T.length; } else {if(match(a,7,S.ch[j-1])&&match(a,7,S.ch[j+T.length])) {i++;wz[i]=j;} k=j+T.length; } } if(i>0){ printf(\行号:%d,次数:%d,位置分别为:\for(m=1;m<=i;m++) printf(\} } }//检索单词出现在文本文件中的行号、次数及其位置 main() {SString S, T,M; int xz,wz; int next[MaxStrSize]; char a[MaxStrSize],b[MaxStrSize]; do {printf(\ printf(\printf(\printf(\穷举法,KMP算法和BF算法 *\\n\printf(\字符串的加密与解密 *\\n\printf(\建立文本文件 *\\n\printf(\单词字串的计数 *\\n\printf(\单词字串的定位 *\\n\printf(\退出整个程序 *\\n\printf(\请选择(0--5)\scanf(\switch(xz) { case 1 : printf(\请输入主串S:\gets(a); gets(a); printf(\请输入模式串T:\gets(b); InitString(&S,a); InitString(&T,b); printf(\主串S:\printf(\模式串T:\ printf(\请输入开始匹配的下标:\scanf(\ printf(\穷举法匹配位置:%d\printf(\算法匹配位置:%d\get_next(T, next); printf(\算法匹配位置:%d\break; case 2 : printf(\请输入串S:\gets(a); gets(a); InitString(&S,a); printf(\原字符串S:\Encrypt(S,&T); printf(\加密后串T:\ Decrypt(T,&M); printf(\解密后串M:\ break; case 3 : CreatTextFile();break; case 4 : SubStrCount();break; case 5 : SubStrInd();break; case 0 : return 0; default:printf(\选择错误,重新选 \\n\ } }while(1); } 八、测试情况 程序的测试结果如下: 九、参考文献 1、严蔚敏,《数据结构 C语言》,清华大学出版社。 2、谭浩强,《c语言程序设计》,清华大学出版社。