首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++入门程序:求两个字符串的最长公共字串。c++新手求解。解决思路

2012-04-04 
C++入门程序:求两个字符串的最长公共字串。c++新手求解。题目:类和对象的编程求两个字符串的最长公共子串。要

C++入门程序:求两个字符串的最长公共字串。c++新手求解。
题目: 类和对象的编程
  

求两个字符串的最长公共子串。
要求:输入两个字符串,输出它们的最长公共子串,包括长度。
设计一个类String,包括一个len(字符串长度)和字符串指针s。另有如下成员函数
 void getstring ( ) 从用户获取一个字符串
 void display ( ) 输出字符串。 

举例:
输入字符串s1:this is a string
输入字符串s2:my string is abc
 s1 和s2最长公共子字符串=string(长度为7)

这是我们英明的C++老师给我们还没学习一章C++课程的学生出的题,真的对她很无语了,完全不了解我们到底掌握了几多。
希望得到大神的指导,强调点我们用的编译器是vc6.0。真心求解,我已经做了一晚上了,还是毫无进展。

[解决办法]
下面的代码 直接运行:

C/C++ code
#include <iostream>using std::cin;using std::cout;using std::endl;class string{public:    string();    ~string();    void getstring();    void display();    int len;    char *s;};string::string():len(0),s(NULL){}string::~string(){    if(s)    delete []s;        s = NULL;}void string::getstring(){    s = new char[200];    gets(s);    len = strlen(s);}void string::display(){    cout << s;}int main(){string s1,s2;    cout << "please input character s1:" << endl;    s1.getstring();    cout << "please input character s2:" << endl;    s2.getstring();    int i=0, j = 0,m,k,maxp = 0,maxlen = 0,count,q;    while(s2.s[i] && i < s2.len)    {        j = i;        while(s2.s[j] && s2.s[j] != ' ')            ++j;        for(m = 0; s1.s[m];++m)        {            k = i;            if(s1.s[m] == s2.s[k])            {                q = m;                count = 0;                while(k != j && s1.s[q] == s2.s[k])                {++q;                 ++k;                 ++count;                }                if(k == j)                {                    if(count > maxlen)                    {                        maxlen = count;                        maxp = m;                    }                    break;                }            }        }        i = j + 1;    }    cout << endl << endl <<"s1=  ";    s1.display();    cout << endl << "s2=  ";    s2.display();    cout << endl;    if(maxlen != 0)    {cout << "s1和s2的最长公共字符子串=";     for(i = maxp;i < maxp + maxlen;++i)         cout << s1.s[i];     cout << endl;    }    else    {        cout <<"s1和s2没有公共字符子串!" << endl;    }} 

热点排行