输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
/*******************************************************************************
算法
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成
”Thyr stdnts.”。
思想:
构建hash数组,用来标记str2中出现过的字符。如果出现,则标记为1。
然后判断str1是否出现在hash数组中。
其实在做处理字符串查找的时候,我们应该首先想到构建hash数组,
因为字符也就256个,可以用字符的ASCII码,作为下标。
*******************************************************************************/
#include <iostream>
#include <string.h>
using namespace std;
/*
从第一字符串中删除第二个字符串中所有的字符
*/
void deleteGivenWord(char str1[],char str2[]);
int main()
{
char str1[256],str2[256];
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
cin.getline(str1,sizeof(str1));
cin.getline(str2,sizeof(str2));
deleteGivenWord(str1,str2);
cout<<str1<<endl;
}
void deleteGivenWord(char str1[],char str2[])
{
int hashTable[256];//作为hash,标记str2中出现过的字符
memset(hashTable,0,sizeof(hashTable));
int str2_len=strlen(str2);
int str1_len=strlen(str1);
for(int i=0;i<str2_len;i++)
{
hashTable[str2[i]]=1;
}
int loc=0;//用来把没有出现在str2中的数,存入到str1中的loc位置
for(int i=0;i<str1_len;i++)
{
if(hashTable[str1[i]]!=1)
{
str1[loc++]=str1[i];
}
}
str1[loc]=0;
//str1[loc]='\0';
}