数据结构 ------字符串---------

目录

1.串的定义及其运算:

1.1串的基本概念:

 1.2串的基本运算:

2.串的存储结构:

2.1串的顺序存储结构: 

2.2串的链式存储结构:

2.3子串的定位运算/模式匹配/ 

 3.实例演示

3.1初始化 

3.2串比较

3.3串长

3.4串的联接 

3.5从字符常量复制

 3.6演示截图

 4总代码:

4.1main.c

4.2sstring.c 

4.3sstring.h 

5.总结 


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)
串匹配就是对于合法的位置࿰

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟启动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值