打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
删除指定的字符

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

方法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;

}

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)
2015校招笔试面试算法总结之蓝汛笔试 - 推酷
MySQL 十大常用字符串函数
php 去掉字符串的最后一个字符
关于字符串匹配算法研究
Oracle正则表达式规则
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服