CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

求字符串代换函数算法

楼主god_sun(蹲在厕所逗蛆玩)2006-03-09 14:58:16 在 C/C++ / C++ 语言 提问

急~~~ 问题点数:100、回复次数:11Top

1 楼ugg(逸学堂(exuetang.net))回复于 2006-03-09 15:01:54 得分 0

没看懂....Top

2 楼god_sun(蹲在厕所逗蛆玩)回复于 2006-03-09 15:07:59 得分 0

标题错了,就是在一个字符串str1中找到和另一个字符串str2相同的一段,这段替换成str3Top

3 楼piaochen_2002(执子之手,与子偕老!)回复于 2006-03-09 15:10:32 得分 5

KMP之后,替换,再反复调用..Top

4 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 15:11:36 得分 5

string::find;string::substr;string::replaceTop

5 楼god_sun(蹲在厕所逗蛆玩)回复于 2006-03-09 15:14:02 得分 0

就用C或C++,不用自带函数,就自己写Top

6 楼god_sun(蹲在厕所逗蛆玩)回复于 2006-03-09 15:14:29 得分 0

偶现在需要代码~~     很急很急Top

7 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 15:22:53 得分 10

void   main()  
   
  {  
   
  string   t1("1234123123123123");  
  string   t2("1234");  
  string   t3("5678");  
  string::size_type   idx   = t1.find(t2);  
  if(idx!=string::npos)  
  t1.replace(idx,idx+t2.length(),t3);  
  }Top

8 楼god_sun(蹲在厕所逗蛆玩)回复于 2006-03-09 15:28:57 得分 0

昏了,现在就是不能用那个replace()Top

9 楼piaochen_2002(执子之手,与子偕老!)回复于 2006-03-09 15:46:44 得分 30

#include<iostream>  
  #include<crtdbg.h>  
  using   namespace   std;  
  void   GetNext(char*   t,int   lt,int*   next)    
  {    
  int   i=0,j=-1;    
  next[0]=-1;    
  while(i<lt)    
  {  
  if(j<0   ||   t[i]==t[j])    
  {    
  i++;   j++;    
  next[i]=j;  
   
   
  }    
  else  
  {  
  j=next[j];    
     
  }      
  }  
  }    
   
  int   KMP(char*   s,char*   t)    
  {    
  int   next[10],i=0,j=0,lt,ls;    
  lt=strlen(t);   ls=strlen(s);    
  GetNext(t,lt,next);    
  while(i<ls   &&   j<lt)    
  {  
  if(j<0   ||   s[i]==t[j])    
   
  {    
  i++;   j++;    
  }    
  else    
  j=next[j];    
  }  
  if(j<lt)    
  return   -1;    
  else    
  return   i-lt;    
  }  
  void   Replace(char   *src,char   *comparestr,char   *replacestr)  
  {  
                       
            _ASSERT(src!=NULL);  
  _ASSERT(comparestr!=NULL);  
  _ASSERT(replacestr!=NULL);  
       
        while(1)  
        {  
             
                      int   i=KMP(src,   comparestr);  
      if(i<0)         break;  
      memcpy(src+i, replacestr,strlen(   replacestr));  
     
        }  
         
   
  }  
  void   main()  
  {    
  char   str1[]="aababc";  
  char   str2[]="abaababcaababc";  
  char   str3[]="123456";  
    Replace(str2,str1,str3);  
    cout<<str2<<endl;  
   
           
   
  }Top

10 楼piaochen_2002(执子之手,与子偕老!)回复于 2006-03-09 15:48:44 得分 0

这个程序有一定的局限性,就是说comparestr和replacestr要一样的长度,LZ可以改一下.Top

11 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-03-09 15:56:21 得分 50

没用字符串匹配算法.就直接硬求的...呵呵  
   
  int   find(char*dest,const   char*   p)  
  {  
  int   len=strlen(p);  
  int   i   =   0;  
  while   (*dest)  
  {  
  while   ((p)&&(*p   ==   *dest))  
  {  
  i++;  
  p++;  
  dest++;  
  }  
  if   (!*p)  
  return   i-len;  
  dest++;  
  i++;  
  }  
  return   i;  
  }  
  void   replace(char*   dest,int   pos,const   char*   p)  
  {  
  int   i=0;  
  char*   t1   =   dest;  
  while   (*t1)  
  {  
   
  if(i   ==   pos)  
  {  
  while   (*p)  
  {  
  *t1++   =   *p++;  
  }  
  }  
  i++;  
  t1++;  
  }  
  }  
  void   main()  
  {  
   
  char   t1[]   =   {"1234123123123123\0"};  
  char   t2[]={"1234\0"};  
  char   t3[]={"5678\0"};  
  int   pos   =   find(t1,t2);  
  replace(t1,pos,t3);  
  }Top

相关问题

  • 字符串函数?
  • 字符串函数
  • 字符串加解密函数,解析算法的核心意思
  • ATL & ANSI字符串函数
  • 字符串比较函数
  • 字符串处理函数
  • 字符串函数问题
  • 字符串匹配函数?
  • 字符串加密算法
  • 字符串倒转算法

关键词

  • 字符串
  • idx
  • replace
  • str

得分解答快速导航

  • 帖主:god_sun
  • piaochen_2002
  • dragonzxh
  • dragonzxh
  • piaochen_2002
  • dragonzxh

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo