📄 replace.h
字号:
#ifndef REPLACE_H
#define REPLACE_H
int *Next(string P) //特征向量计算函数
{
int m=P.size();
int * N=new int [m];
N[0]=0;
for(int i=1;i<m;i++)
{
int k=N[i-1];
while(k>0&&P[i]!=P[k])
k=N[k-1];
if(P[i]==P[k])
N[i]=k+1;
else
N[i]=0;
}
return N;
}
int KMP_FindPat(string S,string P,int * N,int startindex) //KMP匹配函数
{
int LastIndex=S.size()-P.size();
if((LastIndex-startindex)<0)
return -1;
int i,j=0;
for(i=startindex;i<S.size();i++)
{
while(P[j]!=S[i]&&j>0)
j=N[j-1];
if(P[j]==S[i])
j++;
if(j==P.size())
return i-j+1;
}
return -1;
}
void Replace()
{
string temp1,temp2; //temp1是目标字符串,temp2是替换后的字符串
cout<<"请输入要替换的字符串:"<<endl;//由于getline不吃最后一个回车,所以要回车两次
cin.ignore();
getline(cin,temp1);
cout<<"请输入替换后的字符串:"<<endl;
cin.ignore();
getline(cin,temp2);
int *N;
N=Next(temp1);
for(j=v.begin();j!=v.end();++j) //全文替换
{
int startindex=0,start;
start=KMP_FindPat((*j)->s,temp1,N,startindex);
if(start==-1) //无需替换,直接跳过
continue;
(*j)->s.replace(start,temp1.size(),temp2);
}
cout<<"全文替换成功!"<<endl; //全文替换成功提示
history++; //历史记录保存
fstream fhisout("history.his",ios::app|ios::out);
fhisout<<"将"<<temp1<<"全文替换为"<<temp2<<'\n';
fhisout.close();
system("pause");
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -