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];
  }
 }
}

 
											





