1。关于以&打头的参数为引用参数。我经常看见类如:
int index(sstring &s,sstring t,int pos) //取自串的简单模式匹配
concat(sstring &t,sstring s1,sstring s2) //用定长顺序储存表示的串连接操作
这样的代码,其中sstring类型的s,t,s1,s2应该都是引用参数啊,为什么只有s和t加上了"&"?都不加行吗?
2.类似如下代码:
int initlist_sq(sqlist &l)
{
l.elem=(int *)malloc(list_init_size*sizeof(int));
if(!l.elem)
exit(overflow);
l.length=0;
l.listsize=list_init_size;
return ok;
}
在动态分配内存之后有: if(!l.elem) exit(overflow);其中 if(!l.elem) 用书面的语言来说到底什么意思啊?
3。在做串的实验遇到些问题比如
cout<<"输入S1的长度:"<<endl;
scanf("%d",&s1[0]);
要是想把scanf改成cin,后面我该怎么写?
以上相关代码如下:
串的简单模式匹配:
#include<iostream.h>
#include<stdio.h>
#define maxstrlen 255
typedef unsigned char sstring[maxstrlen+1];
int index(sstring &s,sstring t,int pos)
{
int i,j;
i=pos;
j=1;
while(i<=s[0]&&j<=t[0])
{
if(s[i]==t[j])
{
++i;
++j;
}
else
{
i=i-j+2;//**
j=1;
}
}
if(j>t[0])
{
return i-t[0];//**
}
else
{
return 0;
}
}
//////////////////
void main()
{
int re,i,pos;
sstring s1,s2;
cout<<"输入S1的长度:"<<endl;
scanf("%d",&s1[0]);
cout<<"输入S1的数据:"<<endl;
for(i=1;i<=s1[0];i++)
{
cin>>s1[i];
}
cout<<"输入模式串的长度:"<<endl;
scanf("%d",&s2[0]);
cout<<"输入S2的数据:"<<endl;
for(i=1;i<=s2[0];i++)
{
cin>>s2[i];
}
cout<<"输入开始匹配的位置:"<<endl;
cin>>pos;
re=index(s1,s2,pos);
if(re!=0)
{
cout<<"从s1的第"<<re<<"位开始匹配成功!"<<endl;
}
else
{
cout<<"没有发现可以匹配的串!"<<endl;
}
}
用定长顺序储存表示的串连接操作:
#include <stdio.h>
#include <iostream.h>
#define maxstrlen 255///////定义串最大长度
#define true 1
#define false 0
typedef unsigned char sstring[maxstrlen+1];
concat(sstring &t,sstring s1,sstring s2)
{
//concat为自定义的串连接函数;既将s1与s2连接为串t
int i,uncut;
if (s1[0]+s2[0]<=maxstrlen)
{
for(i=1;i<=s1[0];i++)
{
t[i]=s1[i];
}
for(i=s1[0]+1;i<=s1[0]+s2[0];i++)
{
t[i]=s2[i-s1[0]];
}
t[0]=s1[0]+s2[0];
uncut=true;
}
else
if (s1[0]<maxstrlen)
{
for(i=1;i<=s1[0];i++)
{
t[i]=s1[i];
}
for(i=s1[0]+1;i<=maxstrlen;i++)
{
t[i]=s2[i-s1[0]];
}
t[0]=maxstrlen;
uncut=false;
}
else
{
for(i=1;i<=s1[0];i++)
t[i]=s1[i];
uncut=false;
}
return uncut;
}
////////////////////////////
void main()
{
sstring st1,st2,t;
int i,len;
cout<<"输入串1的长度:"<<endl;
scanf("%d",&st1[0]);///////////////////????????????????
cout<<"输入串1的数据:"<<endl;
for(i=1;i<=st1[0];i++)
{
cin>>st1[i];
}
cout<<"输入串2的长度:"<<endl;
scanf("%d",&st2[0]);/////////////////??????????????????
cout<<"输入串2的数据:"<<endl;
for(i=1;i<=st2[0];i++)
{
cin>>st2[i];
}
len=concat(t,st1,st2);
if(len!=0)//////////串没有切断过
{
cout<<"新的串的长度是:"<<t[0]<<endl;//????
cout<<"新的串的数据为:"<<endl;
for(i=1;i<=t[0];i++)
{
cout<<t[i];
}
}
else
{
cout<<"串有部分被切断:"<<"这个串为:"<<endl;
for(i=1;i<=t[0];i++)
{
cout<<t[i];
}
}
}