数据结构-串

串(string):是有0个或多个字符组成的有限序列,一般记为s=‘a1a2----an’ (n>0)
s是串的名
用单引号括起来的是串的值
ai可以使字母,数字,或其他字符
串中字符的数目叫做:串的长度
零个字符的串称为空串,长度为0
串中任意个连续的字符组成的子序列称为该串的子串(模式串)
包含子串的串相应的称为主串
通常称字符在序列中的序号为该字符在串中的位置(1-n)
两个串相等:两个串的长度相等,并且各个对应位置的字符都相等时才相等。
空格串:由一个或多个空格组成的串‘ ’称为空格串,它的长度为串中空格字符的个数
在这里插入图片描述

#define max1 40
typedef char sstring[max1];
status strAssign(sstring T,char *chars)//生成一个值等于chars的串
{
 int i;
 if(strlen(chars)>max1)
 return 0;
 else
 {
  T[0]=strlen(chars);
  for(i=1;i<=T[0];i++)
   T[i]=*(chars+i-1);
   return 1;
 }
}
void strcopy(sstring T,sstring s)//由串s复制得串T
{
  T[i]=s[i];
}
status strEmpty(sstring s)//串是不是空串
{
 if(s[0]==0)
 return 1;
 else
 return 0;
}
status strcompare(sstring s,sstring t)//s>t返回值>0,s=t,返回值=0,s-t<0,返回值<0
{
 int i;
 for(i=1;i<=s[0]&&i<=t[0];i++){
 if(s[i]!=t[i])
  return s[i]-t[i];
  
 }
 return s[0]-t[0];
}
int strlenght(sstring s)//串的长度
{
 return s[0];
}
status strinsert(sstring s,int pos,sstring t)//在s的第pos个字符之前插入串t
{
int i;
if(pos<1||pos>s[0]+1)
return 0;
if(s[0]+t[0]<=max1)
{ //完全插入
  for(i=s[0];i>=pos;i--)
  s[i+t[0]]=s[i];
  for(i=pos;i<pos+t[0];i++)
  s[i]=t[i-pos+1];
  s[0]+=t[0];
  return 1;
    }
}

status strdelete(sstring s,int pos,int len)//删除从串的第pos个字符起长度为len的子串
{
 int i;
 if(pos<1||pos>s[0]-len+1||len<0)
 return 0;
 for(i=pos+len;i<=s[0];i++)
 s[i-len]=s[i];
 s[0]-=len;
 return 1;
}

定长顺序存储表示:

#define maxstrlen 255//用户可在255以内定义最大串长
typedef unsigned char SString[maxstrlen+1];//0号单元存放串的长度
 
串的模式匹配算法:(子串的定位操作)
返回子串T在子串S的第pos个字符之后的位置。若不存在,则函数值为0
int Index(SString S,SString T,int pos )
{
 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;
}
1、简述下列每对术语的区别:空串和空格串;串常量和串变量。
空串:零个字符,长度为0
空格串:由一个或多个空格组成的串‘ ’称空格串
 
2、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;
(1)在执行如下的每个语句后p的值是什么?
p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。)
(12   10 NULL
(2)在执行下列语句后,s3的值是什么?
strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);
(strcpy函数功能是串拷贝,strcat函数的功能是串联接。)
(2)Stocktom,CA  Stocktom,CA,March 5 1999
(3)调用函数strcmp(s1,s2)的返回值是什么?
函数strcmp(1,串2)的功能是串比较,按串的大小进行比较,返回大于0,等于0或小于0的值以表示串1比串2 大,串1等于串2 ,串1小于串2(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?
>0
&s1[5]是一个地址,当放在函数strcmp中时,它就表示指向以它为首地址的一个字符串 (5)调用函数stlen(strcat(s1,s2))的返回值是什么?
strlen是求串长的函数,我们先将s1,s2联接起来,值是"Stocktom,CAMarch 5,1999",数一数有几个字符
24
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值