作者:mobiledu2502931467 | 来源:互联网 | 2023-10-10 19:36
原题:用串的顺序存储结构实现串替换操作Replace(&S,T,V)。分析:替换操作,操作结果为以串V替换所有在串S中出现的和非空串T相等的不重叠子串。用文件originalstr
原题:用串的顺序存储结构实现串替换操作Replace(&S,T,V)。
分析:替换操作,操作结果为以串V替换所有在串S中出现的和非空串T相等的不重叠子串。用文件originalstr.txt存储原来的字符串,laterstr.txt文件存储修改后的字串。
#include
#include
#include
#include
#include
#include
using namespace std;
int Createmainstr();//函数原型声明
int Replace(char *mainstr,char *t,char *v);//函数原型声明
int Displaystr(char *str);//函数原型声明
int GetInfo(char *t,char *v);//函数原型声明
int main()
{
Createmainstr();//生成主串
char mainstr[150],v[20],t[20];
int i=1;char ch;
ifstream infile("originalstr.txt",ios::in);
while(infile.get(ch))
{//将存储在original.txt文件中的主串读入字符数组mainstr中
mainstr[i++]=ch;
}
mainstr[0]=i-1;//主串的实际长度为当前的i-1值
mainstr[i]='\0';//加上串结束符
cout<<"主串mainstr为:";
Displaystr(mainstr);//输出主串
GetInfo(t,v);//获取相关信息
Replace(mainstr,t,v);//调用字符串替换函数
cout<<"替换字符串后的主串mainstr为:";
Displaystr(mainstr);//输出主串
return 1;
}
int GetInfo(char *t,char *v)
{//获取相关信息
int i=1;char ch;
cout<<"你要替换主串中的哪类子字符串,请输入:";
i=1;cin.get(ch);//The fflush function flushes a stream,即清空输入流
while(ch!='&')//&为输入时的结束标志
{
t[i++]=ch;
cin.get(ch);
}
t[0]=i-1;//0号单元存储串长,当前串的实际长度为当前的i-1值
t[i]='\0';
cout<<"你输入的字符串长度为:"<<(int)t[0]<t[0])
{//查找成功
if(t[0]=start+t[0];j--)
mainstr[j+v[0]-t[0]]=mainstr[j];
}
else if(t[0]>v[0])
{//将mainstr中从start+t[0]个字符到第mainstr[0]个字符依次
//前移t[0]-v[0]个字符
for(j=start+t[0];j<=mainstr[0];j++)
mainstr[j-(t[0]-v[0])]=mainstr[j];
}
//将v复制到mainstr[start:start+v[0]-1]中
for(j=1;j<=v[0];j++)
mainstr[j+start-1]=v[j];
mainstr[0]=mainstr[0]+v[0]-t[0];//mainstr的新长度为mainstr[0]+v[0]-t[0]
}
else
start=start+i;//查找失败,新的起始位置为start+i
}
return 1;
}