8字符串

字符串

简称串,是有穷字符序列。字符个数称串长,空串(null string)的长度等于0。

 

串常量:用一对双引号括起来的字符序列  

串变量:一维字符数组 

 

应用较广:

1.文本编辑

2.对C源程序进行编辑、编译  

3.处理用户输入数据、输入命令  

4.模式匹配、模式识别 

 

串运算:插入、删除、查找、替换(有点像线性表),也可看成“特殊的表结构”

 

串与线性表的差别:

串元素是单个字符。

表元素是有独立含义的结点。 

 

C语言的头文件string.h提供的常用串处理库函数

1. strlen(串)           求串长(字符个数)

2. strcat(串1,串2)    串连接(将串2内容接在串1后面)

3. strcmp(串1,串2)   串比较(按字典序)

     若 串1=串2,返回0

     若 串1<串2,返回负数

     若 串1>串2,返回正数         

4. strcpy(串1,串2)    串复制(将串2内容复制到串1串)

5. strchr(串,字符c)    串查找(在串中查找字符c第一次出现的位置)

     若找到,返回这个位置的地址

     否则,返回空地址NULL

6. strstr(串1,串2)    子串匹配(也称模式匹配)

在串1查找内容与串2相同的子串第一个出现的位置

  若找到,返回这个位置的地址

    否则,返回空地址NULL

 

存储方法

多种存储方式:如顺序存储,或链式存储

选择存储方式,既要考虑串的大小,又考虑对串进行何种运算

(1)顺序存储

比较适合于长度较小,或只作简单运算的串

(2)链式存储

比较适合于串很大,而且插入、删除频繁

存储结点的优缺点:

每个字符占一个结点——浪费空间

以行为单位存储(便于修改)

示例

[1]定长(fixture)结点

选定合适的大小m(比如m=80,或m=1024)作为结点的长度,每个结点可存储放的有效字符数不超过m,每行占1到多个结点。

 

结点类型定义为:

#define  m  80

typedef  struct  snode1

  {  char  line[m];  //用于存放字符的值域

     int  count ;  //本结点存放的字符数

     struct  snode1  *next;  //链域

  } fixturenode,*fdptr; //定义结点类型名和指针类型名

 

注意:结点内部:顺序存储;结点之间:链式存储

 

[2]变长(indefinite)结点

每产生一个新行时,调用malloc函数预先为其分配长度为m的存储空间。当本行超长时,调用realloc函数,为其长度加一个增量n。

 

结点类型定义为:

#define  m  80 //每行最小长度

#define  n  40 //重新分配时的长度增量

typedef  struct  snode2

  {  char  *line;  //指向本节点存放字符的区域

     int  linelong ;  //本行当前分配的空间长度

     int  count ;  //本结点存放的字符数

     struct  snode2  *next;  //链域

  } infixturenode,*infdptr; //定义结点类型名和指针类型名

 

posted @ 2018-01-09 18:11  gd_沐辰  阅读(261)  评论(0编辑  收藏  举报