📄 string.cpp
字号:
#include"stringhead.h"
int count;
int begin[80];
void Show(SString T){
puts("\n文章如下:\n===============================================================================");
for(int i=1;i<=T.length;i++)
printf("%c",T.ch[i]);
puts("\n===============================================================================\n");
}
int Load(SString &T,char name[]){
FILE *fp;
char ch;
int i=0;
if((fp=fopen(name,"r"))==NULL)
printf("文件打开失败!");
ch=fgetc(fp);
ch=' ';
T.length=0;
while(ch!=EOF)
{
T.ch[i++]=ch;
T.length++;
ch=fgetc(fp);
}
Show(T);
return 1;
}
int GetString(SString &T)
{
int i=0;
int j=0;
char ch;
char tip;
printf("请输入文章(# 结束):\n");
T.ch[0]=' ';
ch=getchar();
T.length=0;
for(i=1;ch!='#'&&i<LINE*80;i++)
{
T.ch[i]=ch;
T.length++;
ch=getchar();
}
fflush(stdin);
printf("\n是否保存?(Y/N)");
fflush(stdin);
tip=getchar();
if(tip!='y'&&tip!='Y')
return 1;
else
Save(T);
return 1;
}
int Save(SString T)
{
FILE *fp;
char name[30];
int i=0;
int j=0;
char ch;
printf("\n文件保存为: ");
scanf("%s",name);
fflush(stdin);
if((fp=fopen(name,"w"))==NULL)
printf("文件 %s 打开失败!",name);
ch=T.ch[i];
for(;i<=T.length;i++)
{
fputc(ch,fp);
ch=T.ch[i];
// fputc(10,fp);
}
fclose(fp);
printf("\n文件已存为:%s ",name);
return 1;
}
int Counter(SString T){
int space=0;
int letter=0;
int word=0;
int sign=0;
int change=0;
int i=0;
int j=0;
char ch;
char name[30];
FILE *fp;
printf("\n输入要统计的文件名: ");
scanf("%s",name);
fflush(stdin);
if((fp=fopen(name,"r"))==NULL)
printf("文件 %s 打开失败!",name);
printf("\n原文如下:\n");
puts("===============================================================================\n");
ch=fgetc(fp);
putchar(ch);
while(ch!=EOF)
{
if(ch>64&&ch<91||ch>96&&ch<123)
{
letter++;
change=0;
}
else if(ch==' ')
{
space++;
word++;
}
else
{
if(ch!=10)
sign++;
else
word++;
}
ch=fgetc(fp);
putchar(ch);
}
puts("\n===============================================================================\n");
fclose(fp);
printf("文章统计结果如下:\n字母数:%-3d\n空格数:%-3d\n单词数:%-3d\n符号数:%-3d",letter,space,word,sign);
return 1;
}
int Index_KMP(SString &T,Next &N,char match[])
{
int i=1,k=0,j=0;
int pos=1;
int length;
// Load(T,name);
/////////////////////////////////---------getNext array-----------//////////
length=strlen(match)-1;
i=1;j=0;
N.next[0]=length;
N.next[1]=0;
while(i<length)
{
if(j==0||match[i]==match[j])
{++i;++j;N.next[i]=j;}
else j=N.next[j];
}
printf("\n");
////////////////--------------KMP算法匹配----------//////////////
i=1;
j=1;
count=0;
while(i<=T.length)
{
if(i<0) return 0;
while(i<=T.length&&j<=length)
{
if(j==0||T.ch[i]==match[j])
{i++;j++;}
else j=N.next[j];
}
if(j>length)
{
count++;
j=1;
begin[k++]=i-length;
}
}
if(begin[0]<1)
return 0;
else
return 1;
}
int Search(SString &T,Next &N){
char match[80];
char *p=&match[1];
char name[30];
printf("请输入要编辑的文件名:");
scanf("%s",name);
fflush(stdin);
Load(T,name);
match[0]='0';
printf("请输入要查找的字符串:");
scanf("%s",p);
fflush(stdin);
Index_KMP(T,N,match);
printf("字符串%s在文章中共出现了%d次。\n",p,count);
return count;
}
int Delete(SString &T,Next &N){
char match[80];
char *p=&match[1];
int length;
char name[30];
char tip;
match[0]='0';
printf("\n请输入要编辑的文件名:");
scanf("%s",name);
fflush(stdin);
Load(T,name);
printf("\n请输入要删除的字符串:");
scanf("%s",p);
fflush(stdin);
Index_KMP(T,N,match);
length=strlen(match)-1;
if(!begin)
printf("该字符串不存在!\n");
else
{
for(int i=count-1;i>=0;i--)
{
for(int j=begin[i]+length;j<=T.length;j++)
{
T.ch[j-length]=T.ch[j];
}
T.length=T.length-length;
}
}
printf("\n删除成功!\n");
Show(T);
fflush(stdin);
printf("\n是否保存?(Y/N)");
tip=getchar();
if(tip!='y'&&tip!='Y')
exit(0);
else
Save(T);
return 1;
}
int Meum(){
int choice;
puts(" \n\t=========================================================\n");
puts(" 〓〓〓 文字编辑系统 〓〓〓\n ");
puts(" ※ Copyright ☆ XieGang ※ \n ");
puts(" \t=========================================================\n");
printf(" \t\t\t 0-----------------系统信息\n\n");
printf(" \t\t\t 1-----------------文本输入\n\n");
printf(" \t\t\t 2-----------------文章统计\n\n");
printf(" \t\t\t 3-----------------全文搜索\n\n");
printf(" \t\t\t 4-----------------文章删除\n\n");
printf(" \t\t\t 5-----------------退出系统\n\n");
puts(" \t==========================================================\n");
printf("\t\t\t\t请选择: ");
scanf("%d",&choice);
fflush(stdin);
return choice;
}
void SystemInfo(){
FILE *fp;
if(!(fp=fopen("系统信息.txt","r")))
{
puts("说明文件丢失!");
return ;
}
puts("\n\n\n\n");
puts("--------------------------------------------------------------------------------");
puts(" 〓〓〓 系统信息 〓〓〓\n ");
puts("--------------------------------------------------------------------------------");
while(!feof(fp))
putchar(fgetc(fp));
putchar(10);
puts("--------------------------------------------------------------------------------\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -