您的位置:首页 > 其它

从一个字符串(A)中删去另一个字符串(B)中已经出现的字符

2016-04-17 23:29 323 查看

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">从一个字符串(A)中删去另一个字符串(B)中已经出现的字符</span>

1.首先要对另一个字符串进行标记

标记的方法有很多我举一个例子:

用一个bool数组来存26个字母并且对他们初始化为false,如果另外那个字符串存在,则将它变为true

比如 num[2]=true,就是说明 b 这个字符出现于另外一个字符串

2.就是去掉那些在A中已经被标记的字符

你可以用移动的方法去掉它:(这种方法的时间复杂度为n*n)不提倡

for(int i=0;i<n;i++)

{

k=A[i]-'a';

if(num[k])

{

for(int j=i;j<n-1;j++)

A[j]=A[j+1];

n--;

}

}

另外的一种方法,时间复杂度为n

我们可以设置两个指针 low ,high,开始的时候他们都指向A字符串的第一个元素即 low=high=A;

当high指针指向的字符不是ture,我们将*low=*high 并且 low++ ,high++;

当high指针指向的字符是ture,我们直接high++,其他的不处理;

之后我们需要把踢出去的字符截断,直接*low='\0';

之后直接打印出字符串A;OK 了

话不多说,直接上代码,是最详细的!如果有问题的话,可以直接评论,我会尽快回答的!
<pre name="code" class="cpp">#include<iostream>
using namespace std;
#include<cstring>
bool visited[26]; //设置全局的bool数组,来标记字符的状态

int main()
{
int i,len1,len2,num;
char str1[100];
char str2[100];
cin>>str1>>str2;//输入字符串
for(i=0;i<26;i++)
visited[i]=false;//初始化标志数组
len1=strlen(str1);
len2=strlen(str2);

for(i=0;i<len2;i++)//对字符串2中出现的字符进行标志
{
num=str2[i]-97;
visited[num]=true;
}
/*下面是这个程序的核心*/

char *high,*low;//对两个指针初始化,指向字符串的第一个字符
high=low=str1;
while(*high!='\0')
{

if(!visited[*high-97])
{
*low=*high;
high++;
low++;
}
else
high++;//直接跳过
}
*low='\0';//直接截断字符串,删去多余的字符
if(str1[0]=='\0')  cout<<"字符串1中的字符与字符串2中的字符完全重复"<<endl;
else cout<<str1<<endl;
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: