当前位置:首页 > 数据结构课程设计-字符串操作
T->ch[j]=h+'x'; T->ch[j+1]=l+'z'; j+=2; }
T->length=2*S.length; } //加密
void Decrypt(SString S,SString *T)
{ int i,h,l,m,n,j=0;
for(i=0;i
T->length=S.length/2; } //解密
//------------模式匹配----------------------- int Index(SString S,SString T, int pos) { int i,m,n; SString sub; if (pos>=0)
{ n=StrLength(S); m=StrLength(T); i=pos; while (i<=n-m)
{ SubString(&sub,S,i,m); if (StrCompare(sub,T)!=0) i++; else
return i; } }
return -1; }//穷举法
int IndexBF(SString S,SString T,int pos) {int i,j,k=-1; i= pos; j = 0;
while( i if(S.ch[i] == T.ch[j]){ i++; j++; } else{ i = i-j+1; j =0; } } if(j>=T.length) k=i-T.length; return k; } //BF算法 void get_next(SString T, int next[]) {int j,k; next[0]=-1; next[1] = 0; j = 1;k=0; while( j if(k==0) {j++; next[j]=0; } else k=next[k]; } } int IndexKMP(SString S,SString T,int pos,int next[]) { int i,j,k; i= pos;j =0;k=-1; while (i if(j==0){i++;} else j=next[j]; } if (j>=T.length) k=i-T.length; return k; } //KMP算法 //---------------文本文件单词的检索与计数------------------ int match(char a[],int n,char c) {int i; for(i=0;i if(a[i]==c) return 1; return 0; } void CreatTextFile() {SString S; char fname[10],yn; FILE *fp; printf(\输入要建立的文件名:\ 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(\} }
共分享92篇相关文档