求一算法~~~寻找2个字符串中相同子串的个数。。

yizhibi5929 2008-04-06 03:01:09
求一个寻找2个字符串中相同子串的个数,并返回所有相同的子串。。。。。。。
请高手给个算法。谢谢
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcPlayer 2008-04-07
  • 打赏
  • 举报
回复
用正则表达式吧。很快很方便。
scq2099yt 2008-04-07
  • 打赏
  • 举报
回复
find, left,right, mid
yizhibi5929 2008-04-07
  • 打赏
  • 举报
回复
如何用则表达式。请教一下
yizhibi5929 2008-04-06
  • 打赏
  • 举报
回复
效率先不考虑。帮我看看子串那里。可能有问题
用户 昵称 2008-04-06
  • 打赏
  • 举报
回复
难点是拆分及效率.
昨夜无风 2008-04-06
  • 打赏
  • 举报
回复
你不知道CString有个find的函数吗?
gtfcugbgtf 2008-04-06
  • 打赏
  • 举报
回复
得到字串可以用set容器

#include<iostream>
#include<string>
#include<set>
using namespace std;
set<string> set1;
void findNum(string a,string b,set<string> &setTemp);
int main()
{
string a="good";
string b="goog";
findNum(a,b,set1);

set<string>::iterator pos;
for(pos=set1.begin();pos!=set1.end();++pos)
cout<<*pos<<endl;

return 1;
}

void findNum(string a,string b,set<string> &setTemp)
{


int alen=a.length();
int blen=b.length();

for(int i=0;i<alen;i++)
{
for(int j=1;j<=alen-i;j++)
{
for(int k=0;k<=blen-j;k++)
{
if(a.substr(i,j)==b.substr(k,j))
{
setTemp.insert(a.substr(i,j));
}
}

}
}
}
gtfcugbgtf 2008-04-06
  • 打赏
  • 举报
回复
我写了个函数,你看看 (用的是c++的string类
#include<iostream>
#include<string>
using namespace std;
int findNum(string a,string b);
int main()
{
string a="god";
string b="gog";
int i=findNum(a,b);

cout<<i;

return 1;
}

int findNum(string a,string b)
{
int sum=0;
int alen=a.length();
int blen=b.length();

for(int i=0;i<alen;i++)
{
for(int j=1;j<=alen-i;j++)
{
for(int k=0;k<=blen-j;k++)
{
if(a.substr(i,j)==b.substr(k,j))

sum++;
}

}


}

return sum;
}
yizhibi5929 2008-04-06
  • 打赏
  • 举报
回复
自己写了一个。但是有点错误。希望大家给我指正一下

void lookfor(CString s1,CString s2)
{

int i,j,k,minlen,maxlen,count,percount;
count=0;
percount=0;
CString minstr,maxstr;
char a[100]={0};
int num1=s1.GetLength();
int num2=s2.GetLength();
i=0;j=0;
k=0;
if (num1>num2)
{
minlen=num2;
maxlen=num1;
minstr=s2;
maxstr=s1;

}
else
{
minlen=num1;
maxlen=num2;
minstr=s1;
maxstr=s2;
}

for (i=0;i<minlen;i++)
{
for (j=i+1;j<minlen;j++)
{
int x=0;
for (k=i;k<=j;k++)
{

while(minstr.GetAt(k)!=maxstr.GetAt(x))//终止的现象出现在这一行
{
x++;
if (x>maxlen-1)
break;
}
if (x>maxlen-1)
break;
}
count++;



}
}

TRACE("%d\n",count);




}
大家帮我看看。总是出现终止的现象。顺便帮我改进一下这个程序。
yizhibi5929 2008-04-06
  • 打赏
  • 举报
回复
给个算法程序我分析一下可以不。
用户 昵称 2008-04-06
  • 打赏
  • 举报
回复
将串1逐一折开,并判断串2里是否有相同的串

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧