zoukankan      html  css  js  c++  java
  • 在字符串中删除特定的字符

    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”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!='')
    11         hash[*(pTemp++)]=1;
    12 
    13     char *pSlow = pStr;
    14     char *pFast = pStr;
    15     while(*pFast!='')
    16     {
    17         if(hash[*pFast]!=1)
    18         {
    19             *pSlow = *pFast;
    20             pSlow++;
    21         }
    22         pFast++;
    23     }
    24     //  最后不要忘记加''结束符,在原地修改了原字符串
    25     *pSlow = '';
    26 }

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

  • 相关阅读:
    sql笔记
    虚函数和抽象类笔记
    构造函数和静态构造函数 笔记
    在与sql server 建立连接时出现与网络相关的或特定于实例的错误
    类型转换 笔记
    test
    document.body和document.documentElement比较
    sql2005 存储过程实现分页
    新闻发布用到的存储过程和触发器
    SQL数据查询实例1
  • 原文地址:https://www.cnblogs.com/balingybj/p/4508953.html
Copyright © 2011-2022 走看看