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

📄 1.cpp

📁 静态存储一页文章
💻 CPP
字号:

//文章编辑****
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
//#include"wenzbianji.h"
struct Row
{
	char * rbase;
	int length;
};
struct Page
{
	Row * pbase;
	int n;
};
//创建一页文章。
void CString(Row &R,int length)
{
	R.rbase=(char*)malloc(length*sizeof(char));
	R.length=length;
	cout<<"请输入字符串: ";
	for(int i=0;i<length;i++)
	{ 
		char c;
		cin>>c;
		R.rbase[i]=c;
	}
}
void CPage(Page &ye,int length,int n)
{
	ye.pbase=(Row *)malloc(n*sizeof(Row));
	ye.n=n;//还需附加分配不成功等条件
	for(int j=0;j<n;j++)
	{ 
		ye.pbase[j].rbase=(char *)malloc(length*sizeof(char));//还需附加分配不成功等条件
		if(!ye.pbase[j].rbase)
		cout<<"Allocation failed."<<endl;
		ye.pbase[j].length=length;
	}

cout<<"hua le."<<endl;//进行测试
for( j=0;j<n;j++)
for(int i=0;i<length;i++)
{
	char note; 
	cin>>note;
	ye.pbase[j].rbase[i]=note;
	if(note=='$') 
		for(;i<length;i++)ye.pbase[j].rbase[i]=' ';//这个地方还不行
    if(note=='#') 
		for(j++;j<n;j++)ye.pbase[j].rbase[i]=' ';
	}
	cout<<"hua le."<<endl;//测试
	for(int p=0;p<ye.n;p++)
	{
		cout<<"row"<<(p+1)<<" ";
	for(int q=0;q<ye.pbase->length;q++)//为什么有的出现,有的不出现。
		cout<<ye.pbase[p].rbase[q];
		cout<<endl;
	}

} 
void OPage(Page ye)
{   
for(int j=0;j<ye.n;j++)
{
	cout<<"row:"<<(j+1)<<" ";
for(int i=0;i<ye.pbase->length;i++)//为什么有的出现,有的不出现。
	cout<<ye.pbase[j].rbase;
	cout<<endl;
}
} 
void Stastics(Page ye)
{   int zm=0,sz=0,kg=0,az=0,i=0; 
	char c;
	for(int j=0;j<ye.n;j++)
	{
		for(i=0;i<ye.pbase->length;i++)//为什么有的出现,有的不出现。
			{
			c=ye.pbase[j].rbase[i];
				if(c==' ') kg++;
			else if((int)c>64&&(int)c<91||((int)c>96&&(int)c<123)) zm++;
			else if((int)c>47&&(int)c<58) sz++;
}
}
   az=i*j-kg;      //为什么i 是未定义的,而j不是
cout<<"全部字母个数为: "<<zm<<endl
    <<"全部数字个数为: "<<sz<<endl
    <<"空格数     为: "<<kg<<endl     
    <<"总字数     为   "<<az<<endl;
}

void StasString(Page p,Row s)
{   int m=0;int k=0;char c;
 for(int j=0;j<p.n;j++)
 for(int i=0;i<p.pbase->length;i++)
 {c=p.pbase[j].rbase[i];
if(c!=s.rbase[k])k=0;
else k++;
if(k==s.length){m++;}//考虑重叠情况for(k--;k!=0;k--,j--);
}
cout<<"所给串在文章中出现的次数为: "<<m<<endl;
}
void DelString(Page &p,int m,Row s)
{if(s.length<1||s.length>p.pbase->length||m<1||m>p.n)
	cout<<"你的输入有误,请仔细看提示."<<endl;//你的输入有误,请仔细看提示
else
{   int k=0, temp;char c;cout<<"进行测试."<<endl;
for(int j=0;j<p.pbase[0].length;j++)//for(int j=0;j<p.pbase->length;j++)
{   c=p.pbase[m-1].rbase[j];//m-1才是正确的行
  if(c!=s.rbase[k])k=0;
      else k++;cout<<"k值:"<<s.rbase[k-1]<<endl;
      if(k==s.length)
  {cout<<"确实存在此字符串."<<endl;
      temp=j+1-k;break;//int temp=j-k;break;同样错误1
  }
}
  cout<<"这里;"<<endl;
  Row a;a.rbase=(char*)malloc((p.n-m+1)*(p.pbase->length-temp)*sizeof(char)); a.length=(p.n-m+1)*(p.pbase->length-temp);//weizhi是a的长度,同样错误1
  k=0;
  cout<<"这里;"<<endl;
for(int i=m-1;i<p.n;i++)//从删除位置开始赋值到数组a
{   
  for(j=temp;j<p.pbase->length;j++,k++)
      a.rbase[k]=p.pbase[j].rbase[j];
  j=0;
}cout<<"I'm here;"<<endl;
for(k=0;k<a.length-s.length;k++)a.rbase[k]=a.rbase[k+s.length];//
for(;k<a.length;k++)a.rbase[k]=' ';
for(i=m-1,k=0;i<p.n;i++)
{for(j=temp;j<p.pbase->length;j++,k++)
	p.pbase[j].rbase[j]=a.rbase[k];j=0;}cout<<"这里;"<<endl;
	OPage(p);//可以调用函数0page(p);
} 
} 
void Save(Page P)//new
	{fstream outfile;
outfile.open("information.dat",ios::out|ios::binary);
if(!outfile)
{cout<<"文章打开失败.\n";
abort();
}
for(int i=0;i<P.n;i++)
outfile.write(P.pbase[i].rbase,sizeof(P.pbase[i].rbase));
outfile.close();
}
void Read(Page &P)
{ fstream infile,outfile;
infile.open("information.dat",ios::in|ios::binary);
if(!infile)
{cout<<"文章读取失败.\n";
abort();
}
for(int i=0;i<P.n;i++)
infile.read(P.pbase[i].rbase,sizeof(P.pbase[i].rbase));
infile.close();
OPage(P);
}
void Choose(Page &Ye,int h,int n)
{ int c;cout<<"请选择: ";cin>>c;cout<<endl;
switch(c)
{
  case 1:{cout<<"创建文本   :"<<endl;CPage(Ye,h,n);break;}
  case 2:{cout<<"统计字符   :"<<endl;Stastics(Ye);break;}
  case 3:{cout<<"统计字符串 :"<<endl;int l;Row s;
	  cout<<"请输入字符串长度: ";
      cin>>l;
	  CString(s,l);
	  StasString(Ye,s);
	  break;
		 }
  case 4:{cout<<"删除字符串 :"<<endl;int hang;int l1;Row s1;
	  cout<<"输入所删除的字符串所在行:";
	  cin>>hang;
	  cout<<endl;
      cout<<"请输入字符串长度: ";
      cin>>l1;cout<<endl;
	  CString(s1,l1);
	  cout<<"对的。"<<endl;
	  DelString(Ye,hang,s1);
	  break;
		 }
    case 5:{cout<<"输出字符串"<<endl;OPage(Ye);break;}
  case 6:{cout<<"真的要退出吗?(Y/N) :"<<endl;
	  char x;
	  cin>>x;
	  if(x=='Y')
		  exit(1);
	  break;
		 }
  case 7:{cout<<"保存文本:"<<endl;Save(Ye);break;}//new
  case 8:{cout<<"阅读文本:"<<endl;Read(Ye);break;}
}
Choose(Ye,h,n);
} 
void wenzbianji()
{   
Page Ye;
int hs;int ns;
cout<<"******   本程序应用于文本编辑   ****** "<<endl;
cout<<"******   1.文本行数,请输入: ";
cin>>hs;
cout<<"******   2.文本列数,请输入: ";
cin>>ns;
cout<<" 1.创建文本   2.统计字符 "<<endl;
cout<<" 3.统计字符串 4.删除字符串"<<endl;
cout<<" 5.输出字符串 6.退出程序 "<<endl;
cout<<" 7.保存文本   8.阅读文本 "<<endl;
  Choose(Ye,hs,ns);
}
void main ()
{
    char j;
    int flag=1;
    cout<<"**************** 欢迎进入本系统***************"<<endl;
    cout<<endl;
  while(flag)
  {
      cout<<endl;
      cout <<"    请选择你需要的功能:       "<<endl
          <<"         ┌──────────┐"<<endl
          <<"         │   1.文章的编辑     │"<<endl
          <<"         │   0.退出程序       │"<<endl
          <<"         └──────────┘"<<endl;
      cin>>j;
      switch(j)
  {
        case '1':wenzbianji();break;
        default:flag=0;
			cout<<"程序系统就要退出了,按任意键退出!"<<endl;
  }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -