将主串中所有出现的子串用另一个字符串替换

lanowen 2008-03-18 05:53:39
//程序有点问题,请求修改......
#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();
}










...全文
419 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanowen 2008-03-19
  • 打赏
  • 举报
回复
memset 是系统函数还是自定义函数,为什么要把字符数组全部冲0呢???
ryfdizuo 2008-03-18
  • 打赏
  • 举报
回复
//问题:
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];
//这里的循环的条件判断,怎么和j没关,是不是笔误...
for(j=i-1;i <i-1+length1;j++)
string[j]=s1[j-i+1];
length=length+length1;
return(1);
}
}
//建议:类的构造函数将字符数组全部冲0;
seqstring()
{
length=0;sublength=0;length1=0;
memset(string, 0, maximum);
memset(substring, 0, maximum);
memset(s1, 0, 4);
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧