在字符串中删除特定的字符
2015-05-16 23:50
169 查看
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
对于8位的char型字符而言,总共只有28=256个字符。我们可以新建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为1。这个时候,要查找一个字符就变得很快了:根据这个字符的ASCII码,在数组中对应的下标找到该元素,如果为0,表示字符串中没有该字符,否则字符串中包含该字符。此时,查找一个字符的时间复杂度是O(1)。其实,这个数组就是一个hash表。
代码如下:
参考原文:http://zhedahht.blog.163.com/。
对于8位的char型字符而言,总共只有28=256个字符。我们可以新建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为1。这个时候,要查找一个字符就变得很快了:根据这个字符的ASCII码,在数组中对应的下标找到该元素,如果为0,表示字符串中没有该字符,否则字符串中包含该字符。此时,查找一个字符的时间复杂度是O(1)。其实,这个数组就是一个hash表。
代码如下:
void Del(char *pStr,const char *pDel) { if(pStr==NULL || pDel ==NULL) return ; const int size = 256; int hash[size]; memset(hash,0,sizeof(hash)); const char *pTemp = pDel; while(*pTemp!='\0') hash[*(pTemp++)]=1; char *pSlow = pStr; char *pFast = pStr; while(*pFast!='\0') { if(hash[*pFast]!=1) { *pSlow = *pFast; pSlow++; } pFast++; } // 最后不要忘记加'\0'结束符,在原地修改了原字符串 *pSlow = '\0'; }
参考原文:http://zhedahht.blog.163.com/。
相关文章推荐
- 算法习题63:字符串删除特定字符
- 在字符串中删除特定字符
- 在字符串中删除特定的字符
- 63.在字符串中删除特定的字符
- 字符串面试题系列之六:在字符串中删除特定的字符
- 删除字符串中的特定字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 程序员面试题精选--在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 程序员面试题精选100题(36)-在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 十六周项目二 删除字符串特定字符"空格"
- 在字符串中删除特定的字符
- 36.在字符串中删除特定的字符[Delete source from dest]
- 通过正则 来找出特定的字符 可以输出找出的字符 也可输出删除特定字符的原字符串
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符