在字符串中删除指定字符

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

  (1)思路建立一个256位长度bit数组,存储第二个字符串的每个字符,遍历第一个字符串的时候,根据hash映射,判断该位是否需要删除。
重要的一方面:进行删除操作
    遍历第一个字符串的时候,记录当前已经删除的字符串个数del,然后将不被删除的字符,向前移动del位置。
    这样的话整个字符串的操作的时间复杂度就为o(n)。 del初始为0     
  (2)思路2
     和第一种方法类似,设置了一个指针,deletePtr指向当前删除之后,后序指针预移动的地方,没移动一个字符,deletePtr自增。

二 代码如下:

#include <iostream>
using namespace std ;
const int N = 50 ;

void del(char * p , char * hash)
{
     
int delcount = 0 ;//记录已经删除的字符数目
      char * s = p;
     
while(*s)     
     
{
        
if(hash[*s])             
            delcount
++ ;                          
         
else
           
*(s-delcount) = *s ;                                      
         s
++ ;           
      }

     
*(s-delcount) = '\0' ;
}



int main()
{
  
char s1[N] = "They are students." ;
  
char s2[N] = "aeiou" ;
  
char hash[129] ;
   memset(hash ,
0 ,sizeof(hash)) ;
  
  
char * s = s2;
  
while(*s)    //对第二个字符串映射hash函数
     hash[*s++] = 1 ;
  
   del(s1 , hash) ;
   cout
<<s1<<endl;            
  
   system(
"pause") ;
  
return 0;   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值