字符串ADT定义与实现Word格式.docx
- 文档编号:18093264
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:12
- 大小:17.35KB
字符串ADT定义与实现Word格式.docx
《字符串ADT定义与实现Word格式.docx》由会员分享,可在线阅读,更多相关《字符串ADT定义与实现Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
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"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 ADT 定义 实现