将主串中所有出现的子串用另一个字符串替换
//程序有点问题,请求修改......
#include <iostream.h>
const maximum=100;
class seqstring
{
public:
char string[maximum],substring[maximum],s1[4];
int length,sublength,length1;
seqstring()
{
length=0;sublength=0;length1=0;
}
~seqstring(){}
void create();//创建主串string
void substr(int i,int j); //返回串string的第i个位置开始的j个字符组成的串
int index(); //返回子串substring在主串string中的位置。若不在,返回-1
int insert(int i);//求子串插入到主串的第i个位置
int delstr(int i,int j);//删除主串中从第i个位置开始的j个字符
void repstrall();//将主串中所有出现的子串均用s1替换
void display();//显示替换后的主串
};
void seqstring::create()
{ int i=0;
cout<<"请输入你要计算的字符串,以‘*’为结束标志:"<<endl;
cin>>string[i];
while(string[i]!='*')
{
i++;
cin>>string[i];
}
string[i]='\0';
length=i;
}
void seqstring::substr(int i,int j)
{
int k;
if(i<1 || i>length || j<1 || i+j>length+1)
{
sublength=0;
}
else
{
for(k=i-1;k<i+j-1;k++)
substring[k-i+1]=string[k];
substring[k-i+1]='\0';
sublength=k-i+1;
}
}
int seqstring::index()
{
int i=0,j=0,k;
while(i<length && j<sublength)
{
if(string[i]==substring[j])
{
i++;j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=sublength)
k=i-sublength+1;
else
k=-1;
return (k);
}
int seqstring:: insert(int i)
{
int j;
if(i>length+1)
return (0);
else
{
for(j=length+length1;j>=i-1+length1;j--)
string[j]=string[j-length1];
for(j=i-1;i<i-1+length1;j++)
string[j]=s1[j-i+1];
length=length+length1;
return(1);
}
}
int seqstring::delstr(int i,int j)
{
int k;
if(i<1 || i>length || j<1 || i+j>length+1)
return (0);
else
{
for(k=i+j-1;k<=length;k++)
string[k-j]=string[k];
length=length-j;
}
return (1);
}
void seqstring::repstrall()
{
int i;
i=index();
while(i>=0)
{
delstr(i,sublength);
insert(i);
i=index();
}
}
void seqstring::display()
{
int i;
for(i=0;i<length;i++)
cout<<string[i];
cout<<endl;
}
void main()
{
seqstring mystring;
//seqstring mysubstring;
for(int k=0;k<3;k++)
mystring.s1[k]='?';
mystring.s1[k]='\0';
mystring.length1=3;
mystring.create();
cout<<"你刚才输入的主串是:"<<endl;
for( k=0;k<mystring.length;k++)
cout<<mystring.string[k];
cout<<endl;
cout<<"请输入你需要的子串是从主串中的第几个字符开始?"<<endl;
int i;
cin>>i;
cout<<"请输入你需要的子串的长度是多少?"<<endl;
int j;
cin>>j;
mystring.substr(i,j);
cout<<"你所需要的子串是:"<<endl;
for( k=0;k<mystring.sublength;k++)
cout<<mystring.substring[k];
cout<<endl;
//seqstring s1;
mystring.repstrall( );
cout<<"替换后的新字符串是:"<<endl;
mystring.display();
}