实验三 串基本操作的实现Word下载.docx

上传人:b****5 文档编号:19258453 上传时间:2023-01-04 格式:DOCX 页数:14 大小:78.82KB
下载 相关 举报
实验三 串基本操作的实现Word下载.docx_第1页
第1页 / 共14页
实验三 串基本操作的实现Word下载.docx_第2页
第2页 / 共14页
实验三 串基本操作的实现Word下载.docx_第3页
第3页 / 共14页
实验三 串基本操作的实现Word下载.docx_第4页
第4页 / 共14页
实验三 串基本操作的实现Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验三 串基本操作的实现Word下载.docx

《实验三 串基本操作的实现Word下载.docx》由会员分享,可在线阅读,更多相关《实验三 串基本操作的实现Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

实验三 串基本操作的实现Word下载.docx

T,则返回值=0;

若S=T,则返回值<

0;

若S<

T,则返回值<

0。

  StrLength(S)

返回串S序列中的字符个数,即串的长度。

  ClearString(&

将S清为空串。

Concat(&

T,S1,S2)

  初始条件:

串S1和S2存在。

  操作结果:

用T返回由S1和S2联接而成的新串。

SubString(&

Sub,S,pos,len)

串S存在,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1。

用Sub返回串S的第pos个字符起长度为len的子串。

 

Index(S,T,pos)

串S和T存在,T是非空串,1≤pos≤StrLength(S)。

若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字

符之后第一次出现的位置;

否则函数值为0。

Replace(&

S,T,V)

串S,T和V存在,T是非空串。

用V替换主串S中出现的所有与T相等的不重叠的子串。

 

StrInsert(&

S,pos,T)

串S和T存在,1≤pos≤StrLength(S)+1。

在串S的第pos个字符之前插入串T。

 StrDelete(&

S,pos,len)

串S存在,1≤pos≤StrLength(S)-len+1。

从串S中删除第pos个字符起长度为len的子串。

实验源代码:

#include<

iostream>

stdio.h>

stdlib.h>

string.h>

usingnamespacestd;

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

#defineTRUE1

#defineFALSE0

#defineOK1

#defineMAXSTRLEN255//用户可在内定义最大串长

typedefunsignedcharSString[MAXSTRLEN+1];

//0号单元存放串长度

typedefintStatus;

//Status是函数的类型,其值是函数结果的代码

typedefintElemType;

//chars是串常量,赋于串T的值为chars;

voidStrAssign(SString&

T,charchars[255])

{

intlength,i=0;

length=strlen(chars);

if(length>

255)

{

cout<

<

"

字符串长度超出范围,将截取前个字符;

endl;

for(i=0;

i<

MAXSTRLEN;

i++)

T[i+1]=chars[i];

T[0]=255;

}

else

length;

T[0]=length;

}

//串S存在,由串S复制得串T;

voidStrCopy(SString&

T,SStringS)

inti=0;

while(i<

=S[0])

T[i]=S[i];

i++;

//销毁串

voidDestroyString(SString&

S[0]=0;

cout<

串已被销毁;

//串S存在,若S为空串,则返回TRUE,否则返回FALSE。

StatusStrEmpty(SStringS)

if(S[0]==0)

该串为空串;

returnTRUE;

该串不为空串;

returnFALSE;

//串S和T存在,若S>

T,则返回值>

//若S=T,则返回值=0;

StatusStrCompare(SStringS,SStringT)

inti,k=0;

if(S[0]>

T[0])

return1;

elseif(S[0]<

return(-1);

for(i=1;

=S[0];

{

if(S[i]==T[i])

k=1;

else

break;

}

if(k==1)

return0;

else

return2;

//串S存在,返回串S序列中的字符个数,即串的长度。

StatusStrLength(SStringS)

returnS[0];

//串S存在,将S清为空串。

voidClearString(SString&

inti;

for(i=1;

S[i]='

\0'

;

串已被重置为空串;

//串S1和S2存在,用T返回由S1和S2联接而成的新串。

voidConcat(SString&

T,SStringS1,SStringS2)

inti=1,j=0;

if(S1[0]+S2[0]>

MAXSTRLEN)

两串联接后超出长度范围,将进行截断;

=S1[0];

T[i]=S1[i];

if(i<

while(i<

{

i++;

j++;

T[i]=S2[j];

}

T[0]=MAXSTRLEN;

for(j=1;

j<

=S2[0];

j++)

T[i]=S2[j];

i++;

T[0]=S1[0]+S2[0];

//串S存在,≤pos≤StrLength(S)且≤len≤StrLength(S)-pos+1

//用Sub返回串S的第pos个字符起长度为len的子串

voidSubString(SString&

Sub,SStringS,intpos,intlen)

inti,j=1;

if(pos>

=1&

&

pos<

=StrLength(S))

if(len>

=0&

len<

=StrLength(S)-pos+1)

Sub[0]=len;

for(i=pos;

=pos+len-1;

Sub[j]=S[i];

j++;

cout<

输入len的值不合法;

else

输入pos的值不合法;

//串S和T存在,T是非空串,≤pos≤StrLength(S)

//若主串S中存在和串T值相同的子串,则返回它在

//主串S中第pos个字符之后第一次出现的位置;

否则函数值为。

StatusIndex(SStringS,SStringT,intpos)

intn,m,i;

SStringSub;

0)

n=StrLength(S);

m=StrLength(T);

i=pos;

while(i<

=n-m+1)

SubString(Sub,S,i,m);

if(StrCompare(Sub,T)!

=0)

returni;

return0;

//串S,T和V存在,T是非空串

//用V替换主串S中出现的所有与T相等的不重叠的子串

voidReplace(SString&

S,SStringT,SStringV)

intn,i,j=1;

while((n=Index(S,T,1))!

j=1;

for(i=n;

=n+StrLength(T)-1;

S[i]=V[j];

j++;

//串S和T存在,≤pos≤StrLength(S)+

//在串S的第pos个字符之前插入串T

voidStrInsert(SString&

S,intpos,SStringT)

intn,m,i,j,u;

n=StrLength(T);

u=StrLength(S);

if((S[0]+T[0])>

插入后会超出串长度范围,将进行截取;

m=MAXSTRLEN-(n+pos-1);

j=pos;

for(i=MAXSTRLEN;

i>

MAXSTRLEN-m;

i--)

S[i]=S[j];

for(i=pos;

=n;

S[i]=T[j];

S[0]=MAXSTRLEN;

j=u;

for(i=u+n;

=n+pos;

j--;

n+pos;

S[0]=u+n;

voidStrDelete(SString&

S,intpos,intlen){

//串S存在,≤pos≤StrLength(S)-len+1

//从串S中删除第pos个字符起长度为len的子串

intn,i,j;

n=StrLength(S);

if(pos<

1||pos>

StrLength(S)-len+1)

输入的pos值不合法;

j=pos+len;

S[0]=n-len;

S[n-len+1]='

voidshuru(SString&

T){

charchars[256];

请输入你要的字符数据:

gets(chars);

StrAssign(T,chars);

voidshuchu(SStringT)

for(inti=0;

T[0];

T[i+1];

intmain()

intn,pos,len;

SStringT2,T1,S,S1,S2,Sub,V;

shuru(S1);

串S1为:

shuchu(S1);

shuru(T1);

请输入pos的大小:

cin>

>

pos;

n=Index(S1,T1,pos);

if(n==0)

主串中不存在这样的子串;

第一个这样的子串在主串中第"

个字符后出现的位置为:

n<

getchar();

shuru(T2);

shuru(V);

Replace(S1,T2,V);

取代后的串S为:

shuru(S2);

Concat(S,S1,S2);

联接后的新串S为:

shuchu(S);

串S的长度为:

StrLength(S)<

DestroyString(S1);

DestroyString(S2);

【测试数据及实验结果】

测试数据及实验结果如下:

【实验小结】

定长顺序串的存储结构与c语言中用字符指针存储字符串相比有何优点?

答:

优点是定长顺序串的存储结构类似于数组,调用起来比较方便快捷.

【源代码说明】

1.文件名:

shiyan3.cpp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1