63.在字符串中删除特定的字符。
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”
They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。
/* 63.在字符串中删除特定的字符。 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入” They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。 分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部 分,因为写程序操作字符串能很好的反映我们的编程基本功。 对于查找,快速的方法就是使用哈希。 对于第二个字符串中的每一个字符,我们用字符的ASCII码值作为哈希函数,将其映射到长度为256的布尔数组中, 这样对于第一个字符串的每一个字符,查找该字符在数组特定位置是否存在即可。 对于删除我们可以使用快慢指针。dest和source指针初始化为第一个字符串的开始。 然后,每个循环中,如果指向的字符不在第二个字符串中, 则将该字符复制给dest指向的位置,并且dest和source同时向前走一步, 如果指向的字符在第二个字符串,则仅仅将source向前走一步。 最后dest指向的位置填上一个终止符。 */ #include <iostream> using namespace std; void Func(char* first,char* second) { bool hash_table[256]; for(int i=0;i<256;++i) hash_table[i]=false; while(*second) { hash_table[*second]=true; ++second; } char *dest,*source; dest=first; source=first; while(*source) { if(!hash_table[*source])//如果该字符 不存在第二个串中 { *dest=*source; ++dest; ++source; } else ++source; } *dest='\0'; cout <<first<<endl; } int main() { char first[50],second[50]; cin.getline(first,50); cin.getline(second,50); /* They are students. aeiou */ cout<<"字符串中删除特定的字符后:"<<endl; Func(first,second); return 0; }