字符串ADT定义与实现Word格式.docx

上传人:b****3 文档编号:18093264 上传时间:2022-12-13 格式:DOCX 页数:12 大小:17.35KB
下载 相关 举报
字符串ADT定义与实现Word格式.docx_第1页
第1页 / 共12页
字符串ADT定义与实现Word格式.docx_第2页
第2页 / 共12页
字符串ADT定义与实现Word格式.docx_第3页
第3页 / 共12页
字符串ADT定义与实现Word格式.docx_第4页
第4页 / 共12页
字符串ADT定义与实现Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

字符串ADT定义与实现Word格式.docx

《字符串ADT定义与实现Word格式.docx》由会员分享,可在线阅读,更多相关《字符串ADT定义与实现Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

字符串ADT定义与实现Word格式.docx

MAXCMD20 

//每个命令的最大长度

MAXN10 

//字符串的最大个数

typedef 

struct

{

char 

*ch;

//若是非空串,则按串长分配储存区,否则ch为NULL

int 

length;

//串长度

}String;

StrAssign(String&

T,char 

*chars)

if 

(T.ch)free(T.ch);

i,len;

for 

(len=0;

chars[len];

len++);

//计算chars的长度存入len

(!

len) 

T.ch=NULL;

T.length=0;

}

else

(T.ch=(char*)malloc(len*sizeof(char)))) 

return 

OVERFLOW;

(i=0;

i<

len;

i++)T.ch[i]=chars[i];

T.length=len;

OK;

StrLength(StringT)

T.length;

StrCompare(StringT,StringS)

i;

S.length&

&

i<

i++)

(T.ch[i]!

=S.ch[i]) 

T.ch[i]>

S.ch[i]?

1:

-1;

T.length-S.length;

StrClear(String&

T)

(T.ch){free(T.ch);

T.ch=NULL;

StrConcat(String&

T,StringS1,StringS2)

(T.ch=(char*)malloc(sizeof(char)*(S1.length+S2.length)))) 

S1.length;

i++) 

//将串S1先放在T.ch的前面部分

T.ch[i]=S1.ch[i];

S2.length;

//将串S2接在后面

T.ch[i+S1.length]=S2.ch[i];

T.length=S1.length+S2.length;

StrSub(String&

T,StringS,int 

pos,int 

len)

(pos<

0||pos>

=S.length||len<

0||pos+len-1>

S.length-1) 

ERROR;

//输入数据不合法

T.ch[i]=S.ch[pos+i];

StrCover(String&

T,int 

pos,char 

(pos>

T.length-1) 

(pos+len-1>

T.length-1)

(T.ch=(char*)realloc(T.ch,(pos+len)*sizeof(char)))) 

else 

T.length=pos+len;

i++)T.ch[pos+i]=chars[i];

StrFind(StringT,char 

*S1)

i,j;

(j=0;

i+j<

T.length&

S1[j];

j++)

(T.ch[i+j]!

=S1[j]) 

break;

S1[j]) 

//表示已经找到可行的起始位置

NOTFOUND;

//没有找到可行的起始位置,返回-1

StrReplace(String&

*S2,char 

pos,i,len1,len2;

(len1=0;

S1[len1];

len1++);

//计算串S1的长度

(len2=0;

S2[len2];

len2++);

//计算串S2的长度

while 

(1) 

//判断T串中是否存在串S1

pos=StrFind(T,S1);

(pos==NOTFOUND) 

(len1==len2) 

//当串S1与串S2一样长时,可以直接替换

(i=pos;

pos+len1;

T.ch[i]=S2[i-pos];

(len1<

len2) 

//当串S2的长度大于串S1时,先将T串的S1串后面的串往后移,然后将S2串覆盖T串中S1串

(T.ch=(char*)realloc(T.ch,(T.length+len2-len1)*sizeof(char)))) 

(i=T.length-1;

i>

=pos+len1;

i--)T.ch[i+len2-len1]=T.ch[i];

pos+len2;

i++)T.ch[i]=S2[i-pos];

T.length+=len2-len1;

(len1>

//当串S2小于串S1时,先将T串的S1串后面的串往前移,返回将S2串覆盖T串中的S1串

(i=pos+len1;

i++)T.ch[i-len1+len2]=T.ch[i];

T.length-=len1-len2;

StrPrint(StringT)

(T.length)

i++)printf("

%c"

T.ch[i]);

printf("

\n"

);

NothingtoPrint.\n"

CharsCompare(char 

*T,char 

*S)

T[i]&

S[i];

(T[i]!

=S[i]) 

T[i]>

S[i]?

T[i]?

0;

main()

cmd[MAXCMD]={0};

//命令

ret;

//函数的返回值

StringS[MAXN]={0},*p,*pa,*pb;

//S:

字符串 

p:

指向字符串的指针

tmp[MAXLEN]={0},tmpa[MAXLEN]={0},tmpb[MAXLEN]={0};

Sn[3],Sa[3],Sb[3];

***********************************************\n"

每次读入的字符串的最大长度:

%d\n"

MAXLEN);

可操作的字符串的个数为:

%d(即编号为:

%d~%d)\n"

MAXN,0,MAXN-1);

请保证输入格式的正确性O(∩_∩)O~\n"

(1)

scanf("

%s"

cmd);

//读入命令项

(cmd[0]=='

#'

) 

//询问已完成

CharsCompare(cmd,"

StrAssign\0"

))

Sn);

//对Sn字符串进行操作

tmp);

//chars的初始值

p=&

S[Sn[1]-'

0'

];

ret=StrAssign(*p,tmp);

StrLength\0"

ret=StrLength(*p);

%s'

slengthis%d.\n"

Sn,ret);

ret=OK;

StrCompare\0"

%s%s"

Sa,Sb);

pa=&

S[Sa[1]-'

pb=&

S[Sb[1]-'

ret=StrCompare(*pa,*pb);

%s"

Sa);

(ret==0)printf("

="

(ret==1)printf("

>

"

(ret==-1)printf("

<

%s\n"

Sb);

StrClear\0"

ret=StrClear(*p);

StrConcat\0"

%s%s%s"

Sn,Sa,Sb);

pa=&

ret=StrConcat(*p,*pa,*pb);

(ret==OK)StrPrint(*p);

StrSub\0"

pos,len;

%s%s%d%d"

Sa,Sb,&

pos,&

len);

ret=StrSub(*pb,*pa,pos,len);

(ret==OK)StrPrint(*pb);

StrCover\0"

pos;

%s%d%s"

Sn,&

pos,tmp);

ret=StrCover(*p,pos,tmp);

StrFind\0"

Sn,tmp);

ret=StrFind(*p,tmp);

(ret!

=NOTFOUND)printf("

In%s,the%dthisequalto%s\n"

Sn,ret,tmp);

NotFound\n"

StrReplace\0"

Sn,tmpa,tmpb);

ret=StrReplace(*p,tmpa,tmpb);

StrPrint\0"

ret=StrPrint(*p);

TheCommandisError.\n"

(ret==OK)printf("

ThisCommandisSuccessful.\n\n"

(ret==ERROR)printf("

TheinputdataisError.\n\n"

(ret==OVERFLOW)printf("

OVERFLOW.\n\n"

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

当前位置:首页 > 解决方案 > 学习计划

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

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