自己写了一个。但是有点错误。希望大家给我指正一下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);
}
大家帮我看看。总是出现终止的现象。顺便帮我改进一下这个程序。

解决方案 »

  1.   

    我写了个函数,你看看 (用的是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;
    }
      

  2.   

    得到字串可以用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));
    }
    }

    }
    }
    }
      

  3.   

    你不知道CString有个find的函数吗?