⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.cpp

📁 航空订票信息系统很好的一个用C篇的,希望大家下载交流
💻 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 + -