求字符串代换函数算法
急~~~ 问题点数: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




