#2
玉垒浮云2013-05-11 23:56
#include<iostream>
#include<fstream> #include<cstring> #include<string> using namespace std; const int maxrow=20; const int maxelem=400; template<class T> class Triarray { public: Triarray(int matsize);//构造函数 // void SeqString(char S[ ], char K[ ]); ~Triarray(){}//析构函数 void putele( T item,int i,int j);//将矩阵元素item存储到i行j列 void readmat();//矩阵元素输入 T getele(int i,int j);//取i行j列的元素 void out();//输出矩阵元素 bool getij(int i,int j);//判断是否越界 void BF(T *s,T *t);//模式匹配 T arr[maxelem];//一维数组,用于储存矩阵元素 void print(T ch[]); private: int n;//矩阵阶数 int k;// }; template<class T> Triarray<T>::Triarray(int matsize) { n=matsize; } template<class T> bool Triarray<T>::getij(int i,int j) { if((i<1||i>n)||(j<1||j>n)) {cout<<"数组下标越界"<<endl;exit(1);} return true; } template<class T> void Triarray<T>::putele(T item,int i,int j) { if(getij(i,j)) { k=(i-1)*n+j; arr[k]=item; } cout<<"k="<<k<<endl; } template<class T> void Triarray<T>::readmat() { T item; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { cin>>item; putele(item,i,j); } } template<class T> T Triarray<T>::getele(int i,int j) { T item;int k1; if(getij(i,j)) { k1=(i-1)*n+j; } item=arr[k1]; return item; } template<class T> void Triarray<T>::out() { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) cout<<" "<<getele(i,j); cout<<endl; } } //模式匹配算法 template<class T> void Triarray<T>::BF(T *arr,T *t) { int i=0,j=0,n,m; n=strlen(arr); m=strlen(t); while(i<n && j<m) { if(arr[i]==t[j]) { i++; j++; } else { i=i-j+1; j=0; } } if (j>=m) { print(t);cout<<"是";print(arr);cout<<"的子序列"<<endl;} else { print(t);cout<<"不是";print(arr);cout<<"子序列"<<endl;} } template<class T> void Triarray<T>::print(T ch[] ) { int n=strlen(ch); for (int j=0;j<n;j++) cout<<ch[j]; } void main() { char* s1="this"; char* s2="two"; char* s3="fat"; char* s4="that"; int n; cout<<"输入矩阵阶数"<<endl; cin>>n; Triarray<char>a(n); a.readmat(); cout<<"输出矩阵"<<endl; a.out(); a.BF(a,s1); 这是我能想到的,但是出错了,而且功能不完善 vc提示的错误是cannot convert parameter 1 from 'class Triarray<char>' to 'char *' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 执行 cl.exe 时出错. 求大神帮助,其实我的算法也是不对的,要逐行比较才能得到正确结果,可是我却把矩阵转换成一维数组来进行比较,不符合要求的,我真的无力了,求帮助 |
在美国流行一种找词游戏,要求游戏者从一张填满字符的正方形表中,找出所有的英文单词,这些词可以横着读、竖着读、或者斜着读。为这个游戏设计一个算法。
我用的是矩阵,然后准备结合BF算法,可是有个关键问题不会,举个例子,
矩阵
that
what
herh
teru
我现在找her这个单词,应该用for循环来判断,可是怎么跟矩阵中的her来比较是否一样呢?
就是判断if(“her”==?)?该怎么写呢?
求大神帮助