发布网友 发布时间:2022-05-21 08:36
共1个回答
热心网友 时间:2023-10-21 00:14
#include<iostream> #include<string> class String //定义简单字符串类 { int length; char*contents; public: ~String(){delete contents;} //析构函数 int Getlength(){return length;} //计算字符串长度 char*Getcontents(){return contents;} //获取字符串内容 int Setcon(char*con); //置字符串,修改字符,重载Setcon() void Print(){cout<<contents<<endl;} //输出字符串 }; class Editstring:public String //定义编辑字符串类 { int cursor; //光标位置 public: int Getcursor(){return cursor;} //获取当前光标位置 void Movecur(int num){cursor=num;} //移动光标 int Instr(String *newtext); //在光标所在位置插入新字符串 int Replstr(String *newtext); //在光标所在位置用新字符串替换 void Delstr(int num); //在光标所在位置开始删除num个字符 }; int string::Setcon(char*con) //类外定义Setcon函数 { length=strlen(con); //求字符串con的长度 if(!contents) delete contents; //若字符串已有内容,则先删除 contents=new char[length+1]; //为字符串分配存储 strcpy(contents,con); //字符串赋值 return length; } int Editstring::Instr(String*newtext) //类外定义Instr函数 { int el,k,sl; char*sp,*ep; el=newtext->Getlength(); ep=newtext->Getcontents(); sl=Getlength(); sp=Getcontents(); char*news=new char[el+sl+1]; for(int i=0;i<cursor;i++) news[i]=sp[i]; //将当前光标之前的内容赋值给news k=i; for(int j=0;j<el;i++,j++) news[i]=ep[i]; cursor=i; for(j=k;j<sl;i++,j++) news[i]=sp[j]; news[i]='\0'; Setcon(news); delete news; return cursor; } int Editstring::Replstr(String*newtext) //类外定义Replstr函数 { int el,sl; char*ep,*news; el=newtext->Getlength(); ep=newtext->Getcontents(); sl=Getlength(); news=new char[sl>el+cursor?sl+1:el+cursor+1]; news=Getcontents(); for(int i=cursor,j=0;i<el+cursor;i++,j++) news[i]=ep[i]; if(sl<el+cursor) news[i]='\0'; cursor=i; Setcon(news); delete news; return cursor; } void Editstring::Delstr(int num) { int sl; char*sp; sp=Getcontents(); sl=Getlength(); for(int i=cursor;i<sl;i++) sp[i]=sp[i+num]; sp[i]='\0'; } void main() { String s1; //定义简单字符串对象s1 Editstring s2; //定义编辑字符串类对象s2 char*cp,n,n1; //n为起始输入字符串,n1为要修改的字符串 int m,m1; //m为光标位置,m1为字符个数 cout<<"请输入一个字符串:"; cin>>n; s1.Setcon(n) //为s1赋值 cout<<"s1的内容:"; s1.Print(); cp=s1.Getcontents(); //将对象s1的内容赋值给cp es=s2.Setcon(cp); //将cp内容赋给es cout<<"s2的内容:"; s2.Print(); //输出es的内容 cout<<"请输入移动光标到达的位置:"; cin>>m; s2.Movecur(m); //移动光标位置到m cout<<"请输入要修改的字符串内容:"; cin>>n1; s1.Setcon(n1); //修改s1对象的字符串内容 s2.Instr(&s1); //将s1对象的内容插入到es对象中 cout<<"s1的内容:"; s1.Print(); cout<<"插入后的结果:"<<endl; s2.Print(); //显示es内容 cout<<"请输入移动光标到达的位置:"; cin>>m; s2.Movecur(m); //移动光标位置到m cout<<"请输入要删除的字符串个数:"; cin>>m1; s2.Delstr(m1); //在当前光标处删除m1个字符 cout<<"删除后结果:"<<endl; s2.Print(); cout<<"请输入要修改的字符串内容:"; cin>>n1; s1.Setcon(n1); //修改s1对象的字符串内容 s2.Replstr(&s1); cout<<"s1内容:"; s1.Print(); cout<<"替换后的结果:"; s2.Print(); }