分享

删除指定的字符

 孤步 2012-08-01

//========================================================================

方法1

//实现的功能是: 将字符串"askdaskaskdaskgasg" 删除指定的字符ask,删除后的结果是"ddgasg"


//=========================================================================

#include <stdio.h>

#include <string>

#include <iostream>

using namespace std;

 

void DeleteStr(string &Srcstr, const string &Substr)

{

       string Results("");//保留字符 的结果数组

    int i = 0;

      

       while(i < Srcstr.size())

       {

              int j = i;

              int k = 0;

             

              while(k < Substr.size())

              {

                     if(Srcstr[j] == Substr[k])//如果当前的匹配则查找两个字符串的下一个字符

                     {

                            j++;

                            k++;

                     }

                     else//如果当前不相等则退出

                            break;

              }

 

              if(k == Substr.size())//得到了一个匹配的子串,就跳跃子串个字符后寻找下一个字符

              {

                     i += Substr.size();

              }

              else if(k == 0)//此时一个字符都没有匹配到

              {

                     Results += Srcstr[i];

                     i++;

              }

              else//没有匹配子串,则当前已经匹配完了k,同时 k < Substr.size(),那么将这k个字符放入到//保留字符 的结果数组,

                     //然后在Srcstr中跳过 k个长度, k后的第一个字符开始寻找

              {

                     for(int t = i; t < i + k; t++)

                            Results += Srcstr[t];

                     i += k;//从匹配的k个字符之后进行匹配

              }

       }

       cout << "删除子串以后的结果为:" << Results << endl;

}

 //========================================================================

//方法2:比方法1慢,但是简单,只处理删除字符长度pSub_Len

和比较长度j 不等的情况,也不跳跃赋值,只是将 temp = i

这单个字符拷入newstr[]

//=========================================================================

char *DelSubStr(char *pStrSrc, char *pSub,char newstr[])

 {

        int pSub_Len=strlen(pSub),pStrSrc_Len=strlen(pStrSrc);

 

        int i = 0;

        int temp;

        int j = 0;

        int k = 0;

 

        while ( i < pStrSrc_Len)

        {

               temp = i;

               

               while (pSub[j] == pStrSrc[i] && i < pStrSrc_Len && j<pSub_Len)//同时判断多个条件时,前面的条件不满足了,

                      //后面的条件就不会在判断了,把不容易满足的条件放在前面效率高一点

               {

                      i++;

                      j++;

               }

               

               if (j != pSub_Len)

               {

                      newstr[k++] = pStrSrc[temp];

                      i = temp+1;

               }

               

               j = 0;

               

        }

        

        newstr[k] = '\0';

       cout <<newstr <<endl;

 

       return newstr;

 }

 

int main()

{

 

       string sub = "ask";  //解析:删除的是指定字符a s k,不是字符串"ask",所以将str中的每个字符都与sub中的字符比较,

                                          //如果相等,则停止,比较下一个。因为删除的最好办法是把不删除的东西提取出来。

       string str = "askdaskaskdaskgasg";

      

       DeleteStr(str,sub);

 

       return 0;

}

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多