设为首页 加入收藏

TOP

7.11 本章实例
2013-10-07 01:14:34 来源: 作者: 【 】 浏览:58
Tags:7.11 本章 实例

7.11  本章实例

本节以一个字符串处理程序向读者展示指针的使用。

问题:在一个字符串内容中删除某些字符串。

算法:逐字符比较,若不相等就保留,相等就删除。

【实例7-1】 字符串处理程序代码。

  1. #include "stdafx.h"  
  2. #include <iostream.h>  
  3. #define _MAX_ 256                               //字符串最大长度  
  4. int delstring(char **target,char *source);      //删除字符串的函数  
  5. int main()  
  6. {  
  7.     char *p_target=0;  
  8.     char *p_source=0;  
  9.     int k=0;  
  10.     p_target=new char[_MAX_];                   //申请空间  
  11.     p_source=new char[_MAX_];                   //申请空间  
  12.     cout<<"请输入目标串: ";  
  13.     cin>>p_target;  
  14.     cout<<"请输入删除串: ";  
  15.     cin>>p_source;  
  16.     cout<<"在\""<<p_target<<"\"内删除\""<<p_source<<endl;  
  17.     cout<<"---------------"<<endl;  
  18.     if (strlen(p_target)<strlen(p_source))        
  19.         cout<<"目标串长度小于替换串!"<<endl;  
  20.     else 
  21.     {  
  22.        k=delstring(&p_target,p_source);         //删除  
  23.         if (k>0)                                    //成功  
  24.             cout<<p_target<<endl;  
  25.         else 
  26.             cout<<"没找到!"<<endl;  
  27.     }  
  28.     delete[] p_target;                          //释放  
  29.     delete[] p_source;  
  30.         p_target=0;                                 //赋空值  
  31.         p_source=0;  
  32.         return 0;  
  33. }  
  34. int delstring(char **target,char *source)  
  35. {  
  36.     char *p_target=*target;  
  37.     char *p_source=source;  
  38.     char *p_temp=0;  
  39.     char *p_next=0;  
  40.     int pos=0;  
  41.     p_temp=new char[strlen(*target)];           //申请临时空间  
  42.     p_next=p_temp;                              //保留指针头  
  43.     while(strlen(p_target)>=strlen(source))  
  44.     {  
  45.         if (*p_target==*p_source)               //寻找相等串  
  46.         {  
  47.             for(pos=0;pos<strlen(source);pos++)  
  48.             {  
  49.                 if (*(p_target+pos)!=*p_source)   
  50.                     break;                          //寻找结束  
  51.                 p_source++;                     //移动到下一个单元  
  52.             }  
  53.             //部分相等时,复制串  
  54.             if (pos<strlen(source))  
  55.             {  
  56.                 for(int i=0;i<pos;i++)  
  57.                 {  
  58.                     *p_next=*(p_target+i);      //复制数据单元  
  59.                     p_next++;                   //移动下一个单元  
  60.                 }  
  61.             }  
  62.             else 
  63.           {  
  64.                 p_target+=pos;              //跳过复制过的串  
  65.                 p_source=source;                //原串回溯到开始处,准备下一轮比较  
  66.            }  
  67.         }  
  68.         else 
  69.         {  
  70.             *p_next=*p_target;              //复制原串中不相等的字符  
  71.            p_next++;                        //移动下一个单元  
  72.              p_target++;  
  73.         }  
  74.     }  
  75.     //复制剩余的串  
  76.     while(*p_target!='\0')  
  77.     {  
  78.         *p_next=*p_target;                  //复制字符  
  79.         p_next++;                           //移动到下一个字符  
  80.         p_target++;   
  81.     }  
  82.     *p_next='\0';                           //加字符串结束符  
  83.     delete[] *target;  
  84.     *target=p_temp;  
  85.  return 1;  

分析:代码中的delstring函数负责字符串的删除,该函数分两部分。首先是创建一个临时空间存放处理后的串,然后判断原串中是否有与目标串相等的串。判断时逐个比较,如果全部相等就不需要再转移到临时空间中;如果不相等就需要转移。由于原串可能比目标串要长,所以当比较到后期时,原串中剩余的子串长度可能已经小于目标串,只需直接复制到临时空间中即可。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Visual C++从入门到实践 前言 下一篇13.1.9 指向类成员的指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: