串
串(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。)
(1)2 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