在字符串中删除特定的字符

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.””aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

 

对于8位的char型字符而言,总共只有28=256个字符。我们可以新建一个大小为256的数组,把所有元素都初始化为0。然后对于字符串中每一个字符,把它的ASCII码映射成索引,把数组中该索引对应的元素设为1。这个时候,要查找一个字符就变得很快了:根据这个字符的ASCII码,在数组中对应的下标找到该元素,如果为0,表示字符串中没有该字符,否则字符串中包含该字符。此时,查找一个字符的时间复杂度是O(1)。其实,这个数组就是一个hash表。

代码如下:

 

 1 void Del(char *pStr,const char *pDel)
 2 {
 3     if(pStr==NULL || pDel ==NULL)
 4         return ;
 5     const int size = 256;
 6     int hash[size];
 7     memset(hash,0,sizeof(hash));
 8 
 9     const char *pTemp = pDel;
10     while(*pTemp!='\0')
11         hash[*(pTemp++)]=1;
12 
13     char *pSlow = pStr;
14     char *pFast = pStr;
15     while(*pFast!='\0')
16     {
17         if(hash[*pFast]!=1)
18         {
19             *pSlow = *pFast;
20             pSlow++;
21         }
22         pFast++;
23     }
24     //  最后不要忘记加'\0'结束符,在原地修改了原字符串
25     *pSlow = '\0';
26 }

 

参考原文:http://zhedahht.blog.163.com/。

 

转载于:https://www.cnblogs.com/balingybj/p/4508953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值