目录
1.串的定义及其运算:
1.1串的基本概念:
串(string)是零个或多个字符组成的有限序列。 一般为S="a1a2…an"其中S是串名; 双引号括起的字符序列是串值;将串值括起来的双引号本身不属于串,它的作用是避免常与常数或与标识符混淆;ai(1≤i≤n)可以是字母、数字或其他字符;串中所包含的字符个数称为该串的长度。空串是长度为零的串,它不包含任何字符。空白串是仅由一个或多个空格组成的串。
串中任意个连续字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常将子串在主串中首次出现时,该子串首字符对应的主串中的序号定义为子串在主串中的序号(或位置)。
1.2串的基本运算:
先定义几个基本变量:
char s1[20]="hello",s2[20]="world",s3[30];
①求串长。
int strlen(char *s) //求串s的长度
例如:printf("%d",strlen(s1)); //输出5
②串复制。
char *strcpy(char *to,char *from) //将from串复制到to串中
例如:strcpy(s3,s1); //s3="hello",s1串不变
③串联接。
char *strcat(char *to,char *from) //将firom联接到to末尾
例如:strcat(s1,s2); //s1=hello.world
④ 串比较。
int strcmp(char *sl,char *s2) //比较s1和s2的大小,当s1<s2、s1>s2和//s1=s2时,分 别返回<0、大于0和等于0的值。
例如:result=strcmp("that","this"); //result<0
result-strcmp("311030","311030"); //result=0
result-strcmp("sony","lenovo"); //result>0
2.串的存储结构:
2.1串的顺序存储结构:
串的顺序存储结构就是把串所包含的字符序列依次存入连续的存储单元中去,也就是用向量来存储串。如图所示:(以'\0'表示字符串结束)
顺序串的存储结构类型如下:
typedef struct
{ char ch[MAXLEN]; //MAXLEN为向量大小
int len; //len为已存储字符数量
}SeqString;
2.2串的链式存储结构:
和顺序表一样,顺序串的插入和删除操作也不太方便,需要移动大量的字符。因此可用单链表的方式来存储串值,串的这种链式存储结构称为链串儿。链串儿与单链表的差异仅在于其结点数据域为单个字符。如图所示:
链串的存储结构类型如下:
typedef struct node
{ char data;
struct node * next;
}LinkStrNode; //节点类型
2.3子串的定位运算/模式匹配/
子串定位运算类似于串的基本运算中的字符定位运算。只不过是找子串而不是找字符在主串中首次出现的位置。子串定位运算又称串的模式匹配或串匹配。
在串匹配中,一般将主串称为目标串,子串称为模式串。假设T 为目标串,P为模式串,且不妨设:
T=t0 t1 t2····tn-1 P=P0 P1 P2····Pm-1(0<m≤n)
串匹配就是对于合法的位置