串的基本操作.docx

上传人:b****3 文档编号:1926450 上传时间:2022-10-25 格式:DOCX 页数:13 大小:42.27KB
下载 相关 举报
串的基本操作.docx_第1页
第1页 / 共13页
串的基本操作.docx_第2页
第2页 / 共13页
串的基本操作.docx_第3页
第3页 / 共13页
串的基本操作.docx_第4页
第4页 / 共13页
串的基本操作.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

串的基本操作.docx

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

串的基本操作.docx

串的基本操作

串的基本操作

#include

#include

#include

typedefstruct

{

char*str;

intlength;

}HString;//堆串

//初始化

voidInitString(HString&S)

{

S.str='\0';

S.length=0;

}

//堆串赋值

voidStrAssign(HString&S,char*chars)

{

inti,len;

char*p;

p=chars;

return1;

}

//串的比较操作

intStrCompare(HStringS,HStringT)

/*比较串S与串T的大小,如果S的值大于T,返回正值;如果S的值小于T,返回负值;如果相等,返回0*/

{

inti;

for(i=0;i

if(S.str[i]!

=T.str[i])

return(S.str[i]-T.str[i]);

return(S.length-T.length);

}

//串的插入操作

intStrInsert(HString&S,intpos,HStringT)

/*在S中第pos个位置插入T*/

{

inti;

if(pos<0||pos-1>S.length)

{

printf("插入位置错误\n");

return0;

}

S.str=(char*)realloc(S.str,(S.length+T.length)*sizeof(char));

if(!

S.str)

{

printf("内存分配失败\n");

return0;

}

for(i=S.length-1;i>pos-1;i--)

S.str[i+T.length]=S.str[i];

for(i=0;i

S.str[pos+i-1]=T.str[i];

S.length=S.length+T.length;

return1;

}

//串的删除操作

intStrDelete(HString&S,intpos,intlen)

/*在S中删除pos开始的len个字符*/

{

inti;

char*p;

if(pos<0||pos+len-1>S.length)

{

printf("删除位置错误,参数len不合法\n");

return0;

}

p=(char*)malloc(S.length-len);

if(!

p)

{

printf("内存分配失败\n");

return0;

}

for(i=0;i

p[i]=S.str[i];

for(i=pos-1;i

p[i]=S.str[i+len];

S.length=S.length-len;

free(S.str);

S.str=p;

return1;

}

//串的连接操作

intStrConcat(HString&T,HStringS)

/*将串S连接在T后*/

{

inti;

T.str=(char*)realloc(T.str,(T.length+S.length)*sizeof(char));

if(!

T.str)

{

printf("内存分配失败\n");

return0;

}

else

{

for(i=T.length;i

T.str[i]=S.str[i-T.length];

T.length=T.length+S.length;

}

return1;

}

//截取子串操作

intSubString(HString&Sub,HStringS,intpos,intlen)

/*将从S中第pos个位置截取长度为len的子串赋值给Sub*/

{

inti;

if(Sub.str)free(Sub.str);

if(pos<0||len<0||pos+len-1>S.length)

{

printf("参数len和pos不合法\n");

return0;

}

else

{

Sub.str=(char*)malloc(len*sizeof(char));

if(!

Sub.str)

{

printf("内存分配失败\n");

return0;

}

for(i=0;i

Sub.str[i]=S.str[pos+1-1];

Sub.length=len;

return1;

}

}

//串的定位操作

intStrIndex(HStringS,intpos,HStringT)

/*在主串S中的第pos个位置开始查找子串T,如果找到,返回子串在主串中的位置;否则,返回-1*/

{

inti,j;

if(StrEmpty(T))

{

printf("子串为空\n");

return0;

}

i=pos-1;

j=0;

while(i

{

if(S.str[i]==T.str[j])

{

i++;

j++;

}

else

{

i=i-j+1;

j=0;

}

}

if(j>=T.length)

returni-j+1;

else

return-1;

}

//串的替换操作

intStrReplace(HString&S,HStringT,HStringV)

/*将串S中的所有子串T用V替换*/

{

inti=1;

intflag;

if(StrEmpty(T))

{

printf("子串为空\n");

return0;

}

do

{

i=StrIndex(S,i,T);

if(i)

{

StrDelete(S,i,StrLength(T));

flag=StrInsert(S,i,V);

if(!

flag)

{

printf("插入失败\n");

return0;

}

i+=StrLength(V);

}

}while(i);

return1;

}

//串的清空操作

voidStrClear(HString&S)

{

if(S.str)free(S.str);

S.str='\0';

S.length=0;

}

//输出串

voidStrprint(HStringS)

{

inti;

for(i=0;i

printf("%c",S.str[i]);

}

intscan()

{

intd;

printf("\n\n请输入要进行的操作\n1.初始化一个串S\n2.清空串\n3.求串长度\n4.检查串是否为空\n5.输出串\n6.串的赋值操作\n7.串的复制操作\n8.串的比较操作\n9.串的插入操作\n10.串的删除操作\n11.串的连接操作\n12.截取子串操作\n13.串的替换操作\n14.串的定位操作\n其他键退出...\n");

scanf("%d",&d);

return(d);

}

main()

{

intquit=0,pos,len;

chara[200];

char*s=a;

HStringS,T,V,Sub;

while(!

quit)

switch(scan())

{

case1:

InitString(S);break;

case2:

StrClear(S);break;

case3:

printf("串的长度为:

%d\n",StrLength(S));break;

case4:

if(StrEmpty(S))printf("串为空\n");elseprintf("串非空\n");break;

case5:

Strprint(S);break;

case6:

printf("请输入要给串S赋的值:

");

scanf("%s",s);

StrAssign(S,s);

break;

case7:

printf("将串T复制给串S\n");

printf("请输入串T的值:

");

scanf("%s",s);

InitString(T);

StrAssign(T,s);

if(StrCopy(S,T))printf("复制成功。

");

break;

case8:

printf("比较串S与串T的大小,如果S的值大于T,返回正值;如果S的值小于T,返回负值;如果相等,返回0\n");

printf("请输入串T的值:

");

scanf("%s",s);

InitString(T);

StrAssign(T,s);

if(StrCompare(S,T)>0)printf("串S大于串T\n");

elseif(StrCompare(S,T)<0)printf("串S小于串T\n");

elseprintf("串S与串T相等\n");

break;

case9:

printf("在S中第pos个位置插入T\n");

printf("请输入pos:

");

scanf("%d",&pos);

printf("请输入T:

");

scanf("%s",s);

InitString(T);

StrAssign(T,s);

if(StrInsert(S,pos,T))printf("插入成功\n");

break;

case10:

printf("

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

当前位置:首页 > 自然科学 > 化学

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

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