重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第5章 串

字符串
字符串

串 ◆字符串是非数值处理的基本对象 ◆应用领域 信息检索系统 文字编辑程序 语言翻译系统 ◆问题 如何有效地组织和存储字符串,并提供必要的操作
串 字符串是非数值处理的基本对象 应用领域 – 信息检索系统 – 文字编辑程序 – 语言翻译系统 – … … 问题 – 如何有效地组织和存储字符串,并提供必要的操作

C语言中的字符串函数 ◆头文件 # include‘ string. h ◆函数包括 char s strcat(char *strl, char *str2) char s strchr( char *str, int ch) 找出串st中第一次出现字符ch的位置 int strcmp(char str1, char *str 2) char *strcpy(char *str l, char *str2); unsigned int strlen(char *str) Char * strstr(char*strl, char * str2) 找出串st2在串str1中第一次出现的位置
C语言中的字符串函数 头文件 – #include “string.h” 函数包括 – char * strcat(char *str1, char *str2); – char * strchr(char *str, int ch); //找出串str中第一次出现字符ch的位置 – int strcmp(char *str1, char *str2); – char *strcpy(char *str1, char *str2); – unsigned int strlen(char *str); – Char * strstr(char *str1, char *str2); //找出串str2在串str1中第一次出现的位置

Q串的抽象类型定义 D=ail ae CharacterSet, 1=1, 2,.n g R={a12a1>|a12a1∈D,i=2,n} trAssign(&T, chars)∥/串赋值, chars为一字符串常量 StrCopy(&T,S)∥串拷贝 teMpts(S)∥是否空串 StrCompare(S,T)/串比较,分ST情形、S-T情形和S<情形 StrEngth(S)∥取串长 ClearString(&S)∥将串清空 Concat(&T,S1,S2)∥两串联接 SubString(&Sub,S,pos,len)∥从串S中取出从pos个位置起长为len的子 Index(S,T,pos)/若串S中存在和T相同的字串,返回起始位置 Replace(&S,T,V)∥/串替换,用Ⅴ替换S中出现的所有字串T Strlnsert(&s,pos,T)∥/在串S的第pos个字符前插入串T StrDelete(&S,pos3len)∥从串S中删除第pos个字符起长度为en的子串 DestroyString(&S)∥销毁串S JADT String
串的抽象类型定义 ADT String { D = {ai | ai CharacterSet, i = 1,2,…n } R = { | ai-1 , ai D, i = 2,…n} P: StrAssign(&T, chars) //串赋值, chars为一字符串常量 StrCopy(&T, S) //串拷贝 StrEmpty(S) //是否空串 StrCompare(S, T) //串比较,分S>T情形、S=T情形和S<T情形 StrLength(S) //取串长 ClearString(&S) //将串清空 Concat(&T, S1, S2) //两串联接 SubString(&Sub, S, pos, len) //从串S中取出从pos个位置起长为len的子串 Index(S, T, pos) //若串S中存在和T相同的字串,返回起始位置 Replace(&S, T, V) //串替换,用V替换S中出现的所有字串T StrInsert(&S, pos, T) //在串S的第pos个字符前插入串T StrDelete(&S, pos, len) //从串S中删除第pos个字符起长度为len的子串 DestroyString(&S) //销毁串S }ADT String

Q串的表示和实现 ◆选用不同的存储结构,串操作的实现也 各不相同,可选用的串的存储结构包括: 串的定长顺序存储表示 串的堆分配存储表示 串的块链存储表示
串的表示和实现 选用不同的存储结构,串操作的实现也 各不相同,可选用的串的存储结构包括: – 串的定长顺序存储表示 – 串的堆分配存储表示 – 串的块链存储表示

Q串的表示和实现 ◆串的定长顺序存储表示 按照预定义大小,为每个定义的串变量分配一个固定 长度的存储区(可用定长数组来描述) 当串的实际长度超过预定义长度时,字符串将被截断 串操作均基于“字符序列的复制” typedefstruct i char dataMAXSIZEI Int curlen Seqstring 定义一个串变量: Seqstrings; BSUIN 0123 MAXSIZE
串的表示和实现 串的定长顺序存储表示 – 按照预定义大小,为每个定义的串变量分配一个固定 长度的存储区(可用定长数组来描述) – 当串的实际长度超过预定义长度时,字符串将被截断 – 串操作均基于“字符序列的复制” typedef struct { char data[MAXSIZE]; int curlen; } SeqString; 定义一个串变量:SeqString s; S 0 1 2 3 MAXSIZE 3 S U N

串联接:把两个串s1和s2首尾连接成一个新串s,即 1+s2。 /*设串结束用“\0’来标识。*/ int StrConcatl(SeqString sl, SeqString S2, SeqString S) char sl,s2口],s[]; i int i=0, j, len1, len2 len1= StrEngth(s1); len2-StrLength(s2) if(enl+len2> MAXSIZE-l) return0;/*s长度不够* while(sl[]=10,)(sli=s1[]; i++: j++,) j=0; while(s2[]=10,)(s[i]=s2[]; 1++: j++,) 1=10, return 1 O(n)
1.串联接:把两个串s1和s2首尾连接成一个新串s ,即:sMAXSIZE-1) return 0 ; /* s长度不够*/ j=0; while(s1[j]!=’\0’) { s[i]=s1[j];i++; j++; } j=0; while(s2[j]!=’\0’) { s[i]=s2[j];i++; j++; } s[i]=’\0’; return 1; } O(n)

求子串 int StrSub(char *t, char *S, int i, int len) /*用t返回串s中第个i字符开始的长度为en 的子串1 slen lensslen-i+1) printf("参数不对"); return0;,} for =0; j<len; j ++) O(n) tll=S[i+j-1 j]=)0 return 1; M len pos MAXSIZE MAXSIZE
2.求子串 int StrSub (char *t, char *s, int i, int len) /* 用t返回串s中第个i字符开始的长度为len 的子串1≤i≤串长*/ { int slen; slen=StrLength(s); if ( islen || lenslen-i+1) { printf("参数不对"); return 0; } for (j=0; j<len; j++) t[j]=s[i+j-1]; t[j]=’\0’; return 1;} S 0 len pos MAXSIZE 3 0 len T MAXSIZE O(n)

】串的表示和实现 ◆串的堆分配存储表示 堆:一个自由存储区,C中用 malloc和feO来管理 该方法仍以一组地址连续的存储单元存放串值字符 序列,但它们的存储空间在程序执行过程中动态分 配而得 串操作仍基于“字符序列的复制” 设堆空间为: typedef struct char store SMAX+ll { int length;,/*串长* 自由区指针: int free int strada;*起始地址* 串的存储映象类型如右: 3 HString HString T, S strada SUN length 01
串的表示和实现 串的堆分配存储表示 – 堆:一个自由存储区,C中用malloc()和free()来管理 – 该方法仍以一组地址连续的存储单元存放串值字符 序列,但它们的存储空间在程序执行过程中动态分 配而得 – 串操作仍基于“字符序列的复制” typedef struct { int length; /*串长*/ int stradr; /*起始地址*/ } HString; HString T, S; T 0 1 2 3 stradr S U N length 设堆空间为: char store[SMAX+1]; 自由区指针:int free; 串的存储映象类型如右:

1.串常量赋值 void Str Assign( HString *sl, char *s2) /*将一个字符型数组s2中的字符串送入 堆 store中,fee是自由区的指针* i int 1=0,len len= Length(s2); if (lenSMAX return O else(for(i=0; i<len; 1++) store[ frre+1]=s2(i sl strada=free sIlen.len free=free+len
1. 串常量赋值 void StrAssign(HString *s1,char *s2) /*将一个字符型数组s2中的字符串送入 堆store中,free是自由区的指针*/ { int i=0,len; len=StrLength(s2); if (len<0||free+len-1>SMAX) return 0; else {for (i=0;i<len;i++) store[frre+i] =s2[i]; s1.stradr=free; s1.len.=len; free=free+len; } }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第4章 栈和队列.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第3章 线性表.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第2章 算法分析.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第1章 绪论(闫会峰).ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第11章 结构体与共用体.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)渡河问题.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)模式匹配的BF算法.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)树的练习.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)习题讲解(闫会峰).ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)Huffman树及其应用.ppt
- 重庆移通学院:《数据结构》课程教学资源(教程讲义,共二十八课,闫会峰).doc
- 《VC++深入详解教学》第十九讲 动态链接库(孙鑫).ppt
- 《VC++深入详解教学》第十五讲 多线程与聊天室程序的创建(孙鑫).ppt
- 《VC++深入详解教学》第十三讲 文档(孙鑫).ppt
- 《VC++深入详解教学》第十四讲 网络编程(孙鑫).ppt
- 《VC++深入详解教学》对话框(续)(孙鑫).ppt
- 《VC++深入详解教学》第二十讲 HOOK和数据库访问(孙鑫).ppt
- 《VC++深入详解教学》第十二讲 文件(孙鑫).ppt
- 《VC++深入详解教学》第十七讲 进程间通信(孙鑫).ppt
- 《VC++深入详解教学》对话框(孙鑫).ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第6章 数组与广义表.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第7章 树.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)第8章 图.ppt
- 重庆移通学院:《数据结构》课程教学资源(PPT课件讲稿)线性表操作综合运行例子.ppt
- 《Linux课件》第三章 Linux中的进程管理.ppt
- 《Linux课件》SHELL编程.ppt
- 《Linux课件》第三章 Linux的安装与配置.ppt
- 《Linux课件》第四章 Linux使用基础.ppt
- 《Linux课件》第五章 Linux系统管理.ppt
- 《Linux课件》第六章 Linux网络应用.ppt
- 《Linux课件》第二章 Linux的常用命令.ppt
- 《Linux课件》第五章 Linux网络基础.ppt
- 《Linux课件》第六章 Internet应用服务器的配置.ppt
- 《Linux课件》第七讲 linux下C语言编程——基础知识.ppt
- 《Linux课件》第三讲 linux系统中资源的访问与操作.ppt
- 《Linux课件》第四讲 shell程序设计与用户管理.ppt
- 《Linux课件》第四章 用户和组管理.ppt
- 《Linux课件》第四章 用户和组管理.ppt
- 《Linux操作系统》课程教学资源(讲义)第一章 Linux简介与安装(1-1)Linux简介.doc
- 《Linux操作系统》课程教学资源(讲义)第一章 Linux简介与安装(1-2)实例—硬盘安装RedHat Enterprise Linux 5.2.doc