// 36_1.cpp : 定义控制台应用程序的入口点。
//从第一个字符串中删除第二个字符串中出现的所有字符
//如:"we are student"
//删除aeiou后"w r stdnts"
//方法:建立哈希表,遍历字符串2,然后遍历字符串1,值存在就删除
//建立快慢指针,存在就不存值,fast++,不存在就*slow=*fast继续遍历
#include "stdafx.h"
#include<iostream>
using namespace std;
void DelTheSameStr(char arr1[],char arr2[])
{
if(arr1 == NULL ||arr2 == NULL)
return ;
//建立哈希表,初始化哈希表
const int tableSize = 256;
unsigned int hashTable[tableSize];
for(int i =0;i<tableSize;++i)
hashTable[i]=0;
//扫描字符串2,更新哈希表
char *pHashKey = arr2;
while(*pHashKey != '\0')
hashTable[*(pHashKey++)] = 1;
//建立快慢指针,遍历字符串1
char* pFast=arr1,*pSlow=arr1;
while(*pFast != '\0')
{
if(hashTable[*pFast]==1)
pFast++;
*pSlow++ = *pFast++;
}
*pSlow = '\0';
}
int _tmain(int argc, _TCHAR* argv[])
{
char arr1[]="we are student";
char arr2[]="aeiou";
DelTheSameStr(arr1,arr2);
cout << arr1<<endl;
system("pause");
return 0;
}