最长公共子序列LCS

qyxqyxqyx 2012-11-13 11:32:11
#include<iostream>
#include<cstring>
#include<iomanip>
#include<tchar.h>

template<typename charT>
int LCS(const charT * s1,const charT * s2){
int matri[1+strlen(s2)][1+strlen(s1)];
for(int i=0;i<1+strlen(s2);++i){
for(int j=0;j<1+strlen(s1);++j){
if(i==0 || j==0){
matri[i][j]=0;
}
else{
if(s1[j-1]==s2[i-1]){
matri[i][j]=matri[i-1][j-1]+1;
}
else{
matri[i][j]=std::max(matri[i-1][j],matri[i][j-1]);
}
}
std::cout<<std::setw(3)<<matri[i][j];
}
std::cout<<std::endl;
}
return matri[strlen(s2)][strlen(s1)];
}

int main(){
std::cout<<LCS<wchar_t>(_T("一个萝卜一个坑"),_T("萝个坑"))<<std::endl;

return 0;
}
我想匹配中文 咋怎??wchar_t编译不通过
...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qyxqyxqyx 2012-11-13
  • 打赏
  • 举报
回复

#include<windows.h>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<tchar.h>

template<typename T>
class matrix{
	int row;
	int col;
	T* p;
public:
	explicit matrix(int r=0,int c=0):row(r),col(c),p(new T[row*col]){}
	T& operator()(int i,int j){
		return *(p+i*col+j);
	}
	~matrix(){
		if(p){
			delete []p;
		}
	}
};

template<typename charT>
int LCS(const charT * s1,const charT * s2){
    matrix<int> matri(1+lstrlen(s2),1+lstrlen(s1));
    for(int i=0;i<1+lstrlen(s2);++i){
        for(int j=0;j<1+lstrlen(s1);++j){
            if(i==0 || j==0){
                matri(i,j)=0;
            }
            else{
                if(s1[j-1]==s2[i-1]){
                    matri(i,j)=matri(i-1,j-1)+1;
                }
                else{
                    matri(i,j)=max(matri(i-1,j),matri(i,j-1));
                }
            }
            std::cout<<std::setw(3)<<matri(i,j);
        }
        std::cout<<std::endl;
    }
    return matri(lstrlen(s2),lstrlen(s1));
}

int main(){
    TCHAR s1[]=TEXT("一个萝卜一个坑");
    TCHAR s2[]=TEXT("萝个坑");
    std::cout<<LCS<TCHAR>(s1,s2)<<std::endl;

	system("pause");
    return 0;
}

在vs2010上编译通过且运行了,s1的长度是7,s2的长度是3 现在我想显示出来的字呈现不同的颜色怎么办?、? 比如匹配完成之后 一个卜一 萝个坑
qyxqyxqyx 2012-11-13
  • 打赏
  • 举报
回复

#include<windows.h>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<tchar.h>

template<typename charT>
int LCS(const charT * s1,const charT * s2){
    int matri[1+lstrlen(s2)][1+lstrlen(s1)];
    for(int i=0;i<1+lstrlen(s2);++i){
        for(int j=0;j<1+lstrlen(s1);++j){
            if(i==0 || j==0){
                matri[i][j]=0;
            }
            else{
                if(s1[j-1]==s2[i-1]){
                    matri[i][j]=matri[i-1][j-1]+1;
                }
                else{
                    matri[i][j]=std::max(matri[i-1][j],matri[i][j-1]);
                }
            }
            std::cout<<std::setw(3)<<matri[i][j];
        }
        std::cout<<std::endl;
    }
    return matri[lstrlen(s2)][lstrlen(s1)];
}

int main(){
    TCHAR s1[]="一个萝卜一个坑";
    TCHAR s2[]="萝个坑";
    std::cout<<LCS<TCHAR>(s1,s2)<<std::endl;

    return 0;
}

转角天边 2012-11-13
  • 打赏
  • 举报
回复
wcscmp()匹配函数

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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