#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 1000
#define N 30
void menu();
void tongji(char *sFile) ;
int y(char ch1[],char ch2[]);
void biaozun(char *sFile);
void menu1();
void list();
int x(char ch1[],char ch2[]) ;
void replacestring(char *sFile);
void selectstring(char *sFile);
void extracttxt(char *sFile);
void biaozunhua(char *sFile);
int main()
{
char sFile[20];
int i,a;
FILE *fp;
printf("********请输入文件********\n");
scanf("%s",sFile);
fp=fopen(sFile,"r");
biaozunhua(sFile);
biaozun(sFile);
do
{
do
{
menu() ;
printf("********请选择的操作********\n");
scanf("%d",&i);
}while(i<=0&&i>=5);
switch(i)
{
case 0: return 0;
case 1: list() ; break;
case 2: tongji(sFile);break;
case 3: selectstring(sFile) ; break;
case 4: replacestring(sFile) ; biaozun(sFile); break;
case 5:extracttxt(sFile) ; break;
}
menu1();
printf("********请选择的操作********\n");
scanf("%d",&a);
}while(a==1);
return 0;
}
/****************************************************************/
/******************************菜单******************************/
void menu1()
{
printf("********1. 返回菜单********\n");
printf("********按其他键退出********\n");
}
void menu()
{
printf("********0. 退出********\n");
printf("********1. 显示文件信息********\n");
printf("********2. 统计********\n");
printf("********3. 查找********\n");
printf("********4. 替换********\n");
printf("********5. 抽取********\n");
}
/****************************************************************/
/******************************显示文件******************************/
void list()
{
char ch,sFile[N];
FILE *fp;
printf("********请输入显示的文件名********\n");
scanf("%s",sFile);
fp=fopen(sFile,"r");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
while((ch=fgetc(fp))!=EOF)
{
putchar(ch);
}
printf("\n");
fclose(fp);
}
/****************************************************************/
/******************************查找指定字符串******************************/
void selectstring(char *sFile)
{
char str[N],ch1[M];
int n,m,i,j,k,count=0;
FILE *fp;
fp=fopen(sFile,"r");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
while((fgets(ch1,1000,fp))!=NULL)
{
}
printf("********输入你想要查找的字符!********\n");
scanf("%s",str);
n=strlen(ch1);
m=strlen(str);
for(i=0;i<=(n-m);i++)
{
for(k=i,j=0;j<m;k++,j++)
{
if(ch1[k]!=str[j])
break;
}
if(j==m)
count++;
}
if(count==0)
printf("********没有找到你想要查找的字符!********\n");
else
printf("********你想要查找的字符串有%d个********\n",count);
fclose(fp);
}
/****************************************************************/
/******************************抽取信息******************************/
void extracttxt(char *sFile)
{
char ch,dFile[N];
int i;
FILE *fp,*fp1;
printf("********输入存放抽取字符文件名********\n");
scanf("%s",dFile);
fp=fopen(sFile,"r" );
fp1=fopen(dFile,"w");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
if(!fp1)
{
printf("文件无法打开!\n");
exit(1);
}
printf("********0. 抽取字母********\n");
printf("********1. 抽取数字********\n");
do
{
scanf("%d",&i);
}while(i!=0&&i!=1);
switch(i)
{
case 0 :{while((ch=fgetc(fp))!=EOF)
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
fputc(ch,fp1);
}
}; break;
case 1 :{while((ch=fgetc(fp))!=EOF)
{
if(ch>='0'&&ch<='9')
fputc(ch,fp1);
}
};break;
}
fclose(fp);
fclose(fp1);
}
/****************************************************************/
/******************************文件标准化******************************/
void biaozunhua(char *sFile)
{
char ch1[M],*p=ch1,ch;
int i=0,a=0;
FILE *fp,*fp1;
fp=fopen(sFile,"r");
fp1=fopen("D:\\中间文件.txt","w");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
if(!fp1)
{
printf("文件无法打开!\n");
exit(1);
}
while((ch=fgetc(fp))!=EOF)
{
if(ch=='\n')
{
ch=' ';
*(p+i)=ch;
}
*(p+i)=ch;
i++;
}
*(p+i)='\0';
for(i=0;ch1[i]==32;)
{
for(a=0;ch1[a]!='\0';a++)
*(p+a)=*(p+1+a);
}
for(i=0;ch1[i]!='\0';i++)
{
for(;ch1[i]!=32;i++);
if(ch1[i]==' '&&ch1[i+1]==' ')
{
for(a=i;ch1[a]!='\0';a++)
*(p+a)=*(p+1+a);
i=i-1;
}
}
fputs(ch1,fp1);
fclose(fp);
fclose(fp1);
}
void biaozun(char *sFile) //标准化
{
char ch1[M];
FILE *fp,*fp1;
fp=fopen(sFile,"w");
fp1=fopen("D:\\中间文件.txt","r");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
if(!fp1)
{
printf("文件无法打开!\n");
exit(1);
}
while((fgets(ch1,1000,fp1))!=NULL)
{
}
fputs(ch1,fp);
fclose(fp);
fclose(fp1);
}
/****************************************************************/
/******************************替换******************************/
void replacestring(char sFile[])
{
char ch2[N],ch1[M],ch3[N];
int i,n,m,k,a,j,b,c,q;
FILE *fp,*fp1;
fp=fopen(sFile,"r");
fp1=fopen("D:\\中间文件.txt","w");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
if(!fp1)
{
printf("文件无法打开!\n");
exit(1);
}
while((fgets(ch1,M,fp))!=NULL)
{
}
printf("********输入你想要被替换和替换的的字符!********\n");
printf("输入被替换的字符串:"); scanf("%s",ch2);
printf("\n");
printf("输入替换的字符串:"); scanf("%s",ch3);
n=strlen(ch2);
m=strlen(ch3);
k=x(ch1,ch2);
while(k!=(-1))
{
if(m-n>=0)
{
a=m-n;
for(i=(strlen(ch1)+20);i>=k+n;i--)
ch1[i+a]=ch1[i];
for(j=k,b=0;b<m;b++,j++)
ch1[j]=ch3[b];
}
if(n-m>0)
{
q=n-m;
for(c=k;c<(strlen(ch1)+6);c++)
ch1[c]=ch1[c+q];
for(j=k,b=0;b<m;b++,j++)
ch1[j]=ch3[b];
}
k=x(ch1,ch2);
}
fputs(ch1,fp1);
fclose(fp);
fclose(fp1);
}
int x(char ch1[],char ch2[]) //替换的辅助函数
{
int n,m,i,j,k;
n=strlen(ch1);
m=strlen(ch2);
for(i=0;i<=(n-m);i++)
{
for(k=i,j=0;j<m;k++,j++)
{
if(ch1[k]!=ch2[j])
break;
}
if(j==m)
return i;
}
return (-1);
}
/****************************************************************/
/******************************统计******************************/
void tongji(char *sFile)
{
char ch1[M],ch2[N];
int i=0,max,min,t,j=0;
FILE *fp;
fp=fopen(sFile,"r");
if(!fp)
{
printf("文件无法打开!\n");
exit(1);
}
while((fgets(ch1,1000,fp))!=NULL)
{
}
while(ch1[j]!=32)
{
ch2[i]=ch1[j];
i++;
j++;
}
ch2[i]='\0';
max=y(ch1,ch2);
i=0;
j=j+1;
while(ch1[j]!=32)
{
ch2[i]=ch1[j];
i++;
j++;
}
ch2[i]='\0';
t=y(ch1,ch2);
if(t>max)
{
min=max;
max=t;
}
if(t<=max)
min=t;
while(ch1[j]!='\0')
{
i=0;
j=j+1;
while((ch1[j]!=32)&&(ch1[j]!='\0'))
{
ch2[i]=ch1[j];
i++;
j++;
}
ch2[i]='\0';
t=y(ch1,ch2);
if(max<t)
max=t;
if(t<min)
min=t;
}
printf("字符串出现最多的次数是:%d 次\n",max);
printf("字符串出现最少的次数是:%d 次\n",min);
}
int y(char ch1[],char ch2[])
{
int n,m,i,j,k,count=0;
n=strlen(ch1);
m=strlen(ch2);
for(i=0;i<=(n-m);i++)
{
for(k=i,j=0;j<m;k++,j++)
{
if(ch1[k]!=ch2[j])
break;
}
if(j==m)
count++;
}
return count;
}
/****************************************************************/
追问太差了,我不喜欢