- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 字符串
第四章字符串
第1页
字符串定义
字符串是 n ( 0 ) 个字符有限序列,记作 S : “c1c2c3…cn”。其中,
S 是串名字,
“c1c2c3…cn”是串值
ci 是串中字符
n 是串长度。
比如: S = “Zhaoqing University”
这里字符串指逻辑上字符串
C/C++字符串只是字符串一个实现
第四章字符串
第2页
串主要操作
StrAssign(T, chars)生成字符串T
StrCopy(T, S) 复制字符串S为T
StrEmpty(S) 判断S是否为空串
StrCompare(S, T) 比较字符串S和T
StrLength(S) 求字符串S长度
ClearString(S) 清空字符串S
Concat(T,S1,S2) 连接字符串S1和S2为T
SubString(Sub,S,pos,len)求S长度为len位置为pos子串
Index(S,T,pos) 求子串T在主串S中位置
Replace(S,T,V) 在S中用子串V替换子串T
StrInsert(S,pos,T) 在S中插入子串T
StrDelete(S,pos,len) 在S中删除长度为len子串
DestroyString(S) 销毁串S
第四章字符串
第3页
求串T在串S中位置,从pos始
int Index ( String S, String T, int pos ) {
if (pos 0) {
n=StrLength(S); m=StrLength(T); i=pos;
while (i=n-m+1) {
SubString (sub, S, i, m);//取长为m子串
if (StrCompare(sub,T)!=0) ++i;
else return i; //返回子串T在主串S中位置
}//while
}//if
return 0; //S中不存在与T相等子串
}//Index
第四章字符串
第4页
串表示和实现
1.定长次序存放表示
用一组地址连续存放单元存放串值字符序列
对串长表示方法
用下标0数组元素存放串实际长度—Pascal
在串末尾加结束标识字符(不计入串长)—C/C++
#define MAXSTRLEN 255typedef unsigned char String[MAXSTRLEN+1];//新类型String是unsigned char [MAXSTRLEN+1] //0号单元存串长,所以所需空间+1
第四章字符串
第5页
(1)串连接
Status Concat(SString T,SString S1,SString S2) {
//假如连接后串过长则截断
if (S1[0]+S2[0]=MAXSTRLEN) { //无需截断
T[ 1..S1[0] ]=S1[ 1..S1[0] ];
T[ S1[0]+1 .. S1[0]+S2[0] ]=S2[ 1..S2[0] ];
T[0]=S1[0]+S2[0]; uncut=TRUE;
}
else if (S1[0]MAXSTRLEN) { //截S2
T[1..S1[0]]=S1[1..S1[0]];
T[ S1[0]+1 .. MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]];
T[0]=MAXSTRLEN; uncut=FALSE;
}
else { //即S1
T[0..MAXSTRLEN]=S1[0..MAXSTRLEN]; uncut=FALSE;
}
return uncut;
}//Concat
第四章字符串
第6页
(2)求子串
Status SubString (SString Sub, SString S, int pos, int len)
{
if (pos1 || posS[0] || len0 || lenS[0]-pos+1)
return ERROR;
Sub[1..len]=S[pos .. pos+len-1];
Sub[0]=len; return OK;
}//SubString
使用次序存放结构过程中可能出现串长度超出数组上限,经过截断串已经不完整
克服这个问题可使用动态分配串值存放空间。
第四章字符串
第7页
2、堆分配存放表示
堆Heap是操作系统中为进程分配自由存放空间,
在C语言中用malloc()和free()来管理。
在C++语言中用new和delete来管理。
typedef struct {
char *ch; //动态数组首地址(数组名)
int length; //字符串当前长度
} HString;
第四章字符串
第8页
原创力文档


文档评论(0)