/*编写算法,从字符串S中删除所有和字符串t相同的字符*/
#include<iostream>
#include<string>
using namespace std;
void move(string * S,int location);
void compare(string * S,string t)
{
int length_S=S->length();
int length_t=t.length();
int s_index=0; //记录长串的下标
while(s_index <= length_S)
{
if((*S)[s_index] == t[0])//当找到与子串第一个位置相同的时候
{
int index_S = s_index; //记录当前的长串下标
bool flag = true;
for(int i=1;i<length_t;i++)
{
index_S = index_S + 1; //长串往后移动一位
if((*S)[index_S] != t[i])
{
flag = false; //从子串的一个位置与长串的下一个位置开始比较
break;
}
}
if(flag)//在长串中匹配到相同的子串
{
int index = s_index; //记录当前的长串下标
for(int n=0;n<length_t;n++)
{
//开始从长串下标位置起始,把子串长度的字符串都去掉
move(S,index);
}
s_index--; // 移动完毕之后需要下标往前移动,保证一下匹配从当前位置开始
}
}
s_index++; //当前长串下标匹配完毕,匹配后一位
}
}
void move(string * S,int location)
{
int length_S=S->length();
for(int i=location;i<length_S;i++)
{
(*S)[i]=(*S)[i+1];
}
}
void print(string S)
{
cout<<S<<endl;
}
int main()
{
string S="ABCDEF";
string t="ABC";
compare(&S,t);
print(S);
return 0;
}
运行结果:
然后我们把长串改为:”fhfhfasdhfghf”,子串改为”hf”,结果如下: