串的基本操作及其应用.docx
- 文档编号:4964847
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:20
- 大小:235.42KB
串的基本操作及其应用.docx
《串的基本操作及其应用.docx》由会员分享,可在线阅读,更多相关《串的基本操作及其应用.docx(20页珍藏版)》请在冰豆网上搜索。
串的基本操作及其应用
广西工学院计算机学院
《数据结构》课程实验报告书
实验五串的基本操作及其应用
学生姓名:
1
学号:
2
班级:
3
指导老师:
4
专业:
计算机学院软件学院
提交日期:
2013年6月21日
1.实验目的
1)掌握串的定义、存储结构及基本操作。
2.实验内容
(1)建立一个串,实现串的基本操作。
包括:
//1.判串长:
返回串s的元素个数。
intStrLength(HStringS)
//2.判空串:
若串s为空串,则返回true
StatusStrEmpty(HStringS)
//3.串赋值:
现有串s,空串t,实现将s赋值给t的操作
StatusStrAssign(HString&T,HStringS)
//4.串连接:
现有串s和t,实现将t链接到串s之后的操作。
(流程图)
StatusStrConcat(HString&S,HStringT)
//5.串比较:
依次比较2个串s和t,若长度相同且字符相同,则串相同,返回0,若s>t,则返回值>0,若s StatusStrCompare(HStringS,HStringT) //6.串替换: 在主串s中用子串v替换所有的子串t StatusStrReplace(HString&S,HStringV,HStringT) //7.串插入: 在主串s中的给定位置pos插入子串t StatusStrInsert(HString&S,intpos,HStringT) //8.取子串: 将串s中从起始位置pos开始长度len的字符串放入另一个串t StatusSubString(HString&S,intpos,intlen,HString&T) //9.串删除: 删除串s中的子串t。 StatusStrDelete(HString&S,HStringT) //10.求子串位置: 从主串s中取出从第i个位置开始、长度和串t相同的子串,和t进行比较,若相等,则t在s中的位置值为i StatusStrIndex(HString&S,inti,HStringT) // (2)串应用: 设有串s,求出它的所有子串,并输出。 StatusSubString_All(HStringS) 3.实验要求 (1)上机前交实验源程序(纸质版),由学习委员统一收好交老师(附上不交同学名单)。 (2)用一切你能想到的办法解决遇到的问题,培养解决问题的能力。 (3)实验课上进行答辩。 (4)实验报告当场交。 报告内容包括: 实验目的、实验内容、实验代码、实验运行结果以及实验体会供五部分。 串的堆分配存储 typedefstruct { char*ch;//若是非空串,则按串长分配储存区,否则ch为NULL intlength;//串长度 }HString; 2. 3.主要算法 3.1顺序存储结构 (1)结构定义: #include #include #include #defineMAX255 typedefcharsstring[MAX+1]; intstrlength(sstrings);//判断串长 intstrempty(sstrings);//判断空串 intstrassign(sstring&t,char*s);//串赋值 intconcat(sstring&t,sstrings1,sstrings2);//串连接 intstrcompare(sstrings,sstringt);//串的比较 voidstrprint(sstrings);//输出 intstrinsert(sstrings,intpos,sstringt);//串插入 intstrdelete(sstrings,intpos,intlen);//删除字串 intreplace(sstrings,sstringt,sstringv);//串的替换 intsubstring(sstring&sub,sstrings,intpos,intlen);//取子串 intindex(sstrings,sstringt,intpos);//字串定位 //串赋值 intstrassign(sstring&t,char*s) {//初始条件: 字符串chars已经存在 //操作结果: 生成一个其值等于chars的串t inti,n; n=strlen(s); if(n>=MAX) return0; else { t[0]=n; for(i=1;i<=t[0];i++)//依次给串赋值 t[i]=s[i-1]; return1; } } //求串长度 intstrlength(sstrings) {//操作结果: 返回串s的元素 returns[0]; } //判断串是否空 intstrempty(sstrings) { return(s[0]==0);//返回值 } //串连接 intconcat(sstring&t,sstrings1,sstrings2) {//初始条件: 字符串s1和s2已经存在 //操作结果: 用T返回s1和s2连接成的新串。 inti; if(s1[0]+s2[0]<=MAX) { for(i=1;i<=s1[0];i++)//依次把串s1中的元素赋值给串t t[i]=s1[i]; for(i=1;i<=s2[0];i++) t[i+s1[0]]=s2[i]; t[0]=s1[0]+s2[0];//计算串t的长度 return1; } else { for(i=1;i<=s1[0];i++) t[i]=s1[i]; for(i=1;i<=MAX-s1[0];i++) t[i+s1[0]]=s2[i]; t[0]=MAX; return1; } } //串的比较 intstrcompare(sstrings,sstringt) {//初始条件: 字符串chars已经存在 //操作结果: 若是s>t,则返回值>0,若是s=t,则返回值=0,若是s inti; for(i=1;i<=t[i]&&i<=s[0];i++) if(s[i]! =t[i]) returns[i]-t[i];//返回大于的值 returns[0]-t[0];//返回大于的值 } //输出 voidstrprint(sstrings) {//初始条件: 字符串chars已经存在 //操作结果: 依次输出串中的元素 inti; for(i=1;i<=s[0];i++) printf("%c",s[i]); printf("\n\n"); } //串插入 intstrinsert(sstrings,intpos,sstringt) {//初始条件: 字符串chars已经存在 //操作结果: 在串s第pos个字符之前插入串t,完成插入返回,否则返回 inti; if(pos<1||pos>s[0]+1) return0; if(s[0]+t[0]<=MAX) { for(i=s[0];i>=pos;i--) s[i+t[0]]=s[i]; for(i=pos;i s[i]=t[i-pos+1]; s[0]+=t[0]; return1; } else { for(i=s[0];i>=pos;i--) s[i+MAX-s[0]]=s[i]; for(i=pos;i<=s[0];i++) s[i]=t[i-pos+1]; s[0]=MAX; return1; } } //删除字串 intstrdelete(sstrings,intpos,intlen) {//初始条件: 字符串chars已经存在 //操作结果: 在串s第pos个字符起删除长度为len的子串,删除成功返回,否则返回 inti; if(pos<1||pos>s[0]-len+1||len<0) return0; for(i=pos+len;i<=s[0];i++)//依次删除串中指定的元素 s[i-len]=s[i]; s[0]-=len; return1; } //串的替换 intreplace(sstrings,sstringt,sstringv) {//初始条件: 字符串chars已经存在 //操作结果: 串t被s替换,成功返回,否则返回 inti=1; intk; if(strempty(t))//判断串t为空 return0; do { i=index(s,t,i); printf("%d",i); if(i) { strdelete(s,i,t[0]);//调用函数 k=strinsert(s,i,v);//调用函数 if(! k) return0; i+=v[0]; } }while(i); return1; } //取子串 intsubstring(sstring&sub,sstrings,intpos,intlen) {//初始条件: 字符串chars已经存在 //操作结果: 用sub返回串s的第pos个字符起长度为len的子串 inti; if(pos<1||pos>s[0]||len<0||len>s[0]-pos+1) return0; for(i=1;i<=len;i++) sub[i]=s[pos+i-1]; sub[0]=len; return1; } //字串定位 intindex(sstrings,sstringt,intpos) {//初始条件: 字符串chars已经存在 //操作结果: 返回子串T在主串S中第pos个字符之后的位置, //若不存在,则函数值为 inti,j; if(1<=pos&&pos<=s[0]) { i=pos; j=1; while(i<=s[0]&&j<=t[0]) if(s[i]==t[j]) { i++; j++; } else { i=i-j+2; j=1; } if(j>t[0]) returni-t[0]; else return0; } else return0; } //主函数 voidmain() { inti,pos,len; chara[MAX],b[MAX],c[MAX]; sstrings,t,v,sews,sub; intk;//设置选项变量 while (1) { //system("cls");//清屏 printf("\n\t***************************************************"); printf("\n\t*串的基本操作及其应用*"); printf("\n\t***************************************************\n"); printf("\t*1.串的赋值2.串比较*\n"); printf("\t*3.串的长度4.取子串*\n"); printf("\t*5.字符串替换6.字符串插入*\n"); printf("\t*7.字符串连接8.销毁队列*\n"); printf("\t*9.清空队列0.退出*\n"); printf("\t****************************************************\n"); printf("请选择选项<1-9>: ");//打印选项功能提示 scanf("%d",&k); if(k<0||k>9) { printf("输入有误,请重新输入! "); printf("\n"); continue; } switch(k)//分支结构来调用各功能子函数 { case1: printf("字符串的赋值! \n"); printf("请输入两个字符串! \n"); printf("请输入第一个字符串;"); scanf("%s",a); strassign(s,a); printf("\n"); printf("请输第二个字符串;"); scanf("%s",b); strassign(t,b); printf("第一个字符串为: "); strprint(s); printf("第二个字符串为: "); strprint(t); printf("\n"); break;//退出并重新进入主菜单 case2: printf("串的比较! \n"); i=strcompare(s,t);//调用函数 if(i==0) printf("两个字符串相等! \n"); elseif(i<0) printf("第一个字符串比第二个字符串小! \n"); else printf("第一个字符串比第二个字符串大! \n"); printf("\n"); break;//退出并重新进入主菜单 case3: printf("求串的长度! \n"); i=strlength(s);//调用函数 printf("串的长度为: %d",i); printf("\n"); break;//退出并重新进入主菜单 case4: printf("取子串! \n"); printf("输入一个字符串: "); scanf("%s",a); strassign(s,a);//调用函数 printf("\n"); printf("字符串为: "); strprint(s); printf("请输入位置和长度! \n"); scanf("%d%d",&pos,&len); if(substring(sub,s,pos,len)) { printf("所取子串为: "); strprint(sub); } else printf("取子串失败! "); printf("\n"); break;//退出并重新进入主菜单 case5: printf("字符串替换! \n"); printf("请输入主字符串: "); scanf("%s",a); strassign(s,a);//调用函数 printf("\n"); printf("请输需要替换子串: "); scanf("%s",b); strassign(t,b);//调用函数 printf("请输入需要换成的子串: "); scanf("%s",c); strassign(v,c);//调用函数 printf("主字符串为: "); strprint(s); printf("需要替换子串为: "); strprint(t);//调用函数 printf("需要换成的子串为: "); strprint(v); if(replace(s,t,v)) { printf("替换后的新串为: "); strprint(s); } else printf("替换失败\n"); printf("\n"); break;//退出并重新进入主菜单 case6: printf("字符串插入\n"); printf("请输入主字符串\n"); scanf("%s",a); strassign(s,a);//调用函数 printf("请输入要插入的字符串\n"); scanf("%s",b); strassign(t,b);//调用函数 printf("请输入要插入的位置\n"); scanf("%d",&pos); printf("主字符串为: "); strprint(s);//调用函数 printf("要插入的字符串为: "); strprint(t); if(strinsert(s,pos,t)) printf("插入后的新串为: "); strprint(s);//调用函数 printf("\n"); break;//退出并重新进入主菜单 case7: printf("字符串连接\n"); i=concat(sews,s,t);//调用函数 if(i==0) printf("连接失败\n"); else { printf("连接后的新串为: \n"); strprint(sews);//调用函数 } printf("\n"); break;//退出并重新进入主菜单; case0: break; } } } 3.流程图 1.串比较流程图 2.串连接流程图 4.程序运行结果 (1)实验内容 (1) 运行结果如下: 运行结果如下: 运行结果如下: 运行结果如下: 运行结果如下: 运行结果如下: 运行结果如下: 5.心得体会。 图的基本操作还有许多的不解之处,特别是最短距离
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 操作 及其 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)