刚才那个稍微修改了一下,错误还是一样的额
#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);
/*
for(int k=0;k!=n;++k)
{
cout<<"输入矩阵元素"<<endl;
string t;
getline(cin,t);
cout<<"line="<<t<<endl;
if(t=="faus")
cout<<"找到单词"<<endl;
else
cout<<"没有找到单词"<<endl;
}
string filename;
cout<<"请输入文件名"<<endl;
cin>>filename;
ofstream fout(filename.c_str());
fout<<"that"<<endl;
fout<<"whtg"<<endl;
fout<<"oais"<<endl;
fout<<"fshu"<<endl;*/
//
fstream fin(filename.c_str());
/*
int i,j;
for(i=1;i<=n;++i)//矩阵输出
{
for(j=1;j<=n;++j)
{
cout<<" "<<a.getele(i,j);
}
cout<<endl;
}
string t;
char line,h1;
cout<<"找正对角单词"<<endl;
cin>>h1;
for( i=1;i<=n;++i)//正对角元素输出
for( j=1;j<=n;++j)
{
if(j==i)
{
cout<<" "<<a.getele(i,j);
line=a.getele(i,j);
cout<<"line="<<line<<endl;
}
cout<<h1<<endl;
cout<<endl;
}
cout<<"找偏对角元素"<<endl;
string
h2;
cin>>h2;
for( i=n;i>=1;--i)//偏对角元素输出
for( j=1;j<=n;++j)
{
if(i==n+1-j)
cout<<" "<<a.getele(i,j);
}
cout<<endl;*/
}