资源描述
验证性实验5:串子系统
班级学号 012301114114 姓名 胡德文
1.实验目的
(1)掌握串的特点及顺序定长存储的方式。
(2)掌握串的创建、连接、插入、删除、显示等操作。
(3)掌握串的查找、取子字符串、比较串大小的操作
(4)掌握模式匹配的基本思想及其算法。
2.实验内容
(1)由用户通过键盘输入建立一个字符串。
(2)编写插入、删除、查找、比较、取子字符串、连接字符串、显示、模式匹配等程序。
(3)设计一个选择式菜单,以菜单方式选择上述操作。
串 子 系 统
********************************************
* 1------输 入 字 串 *
* 2------连 接 字 串 *
* 3------取 出 子 串 *
* 4------删 除 子 串 *
* 5------插 入 子 串 *
* 6------查 找 子 串 *
* 7------比 较 串 大 小 *
* 8------显 示 字 串 *
* 0------返 回 *
********************************************
请输入菜单选项(0--8):
3. 实验程序
#include <stdio.h>
#define STRINGMAX 100
typedef struct
{ char vec [STRINGMAX];
int len;
}str;
void ConcatStr(str *r1,str *r2)
{ int i;
printf("\n\t\tr1=%s r2=%s\n",r1->vec,r2->vec);
if (r1->len+r2->len>STRINGMAX)
printf("\n\n\t 两个串太长,溢出!\n");
else
{ for (i=0;i<r2->len;i++)
r1->vec[r1->len+i]=r2->vec[i];
r1->vec[r1->len+i]='0';
r1->len=r1->len+r2->len;
}
}
void SubStr(str *r,int i,int j)
{ int k;
str a;
str *r1=&a;
if (i+j-1>r->len)
{ printf ("\n\t\t子串超界!\n");
return;
}
else
{for (k=0;k<j;k++)
r1->vec[k]=r->vec[i+k-1];
r1->len=j;
r1->vec[r1->len]='\0';
}
printf("\n\t\t取出字符为:");
puts(r1->vec);
}
void DelStr(str *r,int i,int j)
{int k;
if(i+j-1>r->len)
printf("\n\t\t所要删除的子串超界!\n");
else
{for (k=i+j;k<r->len;k++,i++)
r->vec[i]=r->vec[k];
r->len=r->len-j;
r->vec[r->len]='\0';
}
}
str *InsStr(str *r,str *r1,int i)
{int k;
if(i>=r->len||r->len+r1->len>STRINGMAX)
printf("\n\t\t不能插入!\n");
else
{ for(k=r->len-1;k>=i;k--)
r->vec[r1->len+k]=r->vec[k];
for(k=0;k<r1->len;k++)
r->vec[i+k]=r1->vec[k];
r->len=r->len+r1->len;
r->vec[r->len]='\0';
}
return r;
}
int IndexStr(str *r,str *r1)
{int i,j,k;
for(i=0;r->vec[i];i++)
for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++)
if(!r1->vec[k+1])
return i;
return -1;
}
int LenStr(str *r)
{int i=0;
while(r->vec[i]!='\0')
i++;
return i;
}
str*CreateStr(str *r)
{ gets(r->vec);
r->len=LenStr(r);
return r;
}
int EqualStr(str *r1,str *r2)
{for(int i=0;r1->vec[i]&&r2->vec[i]&&r1->vec[i]==r2->vec[i];i++);
return r1->vec[i]-r2->vec[i];
}
void main()
{str a,b,c,d;
str *r=&a,*r1;
r->vec[0]='\0';
char choice,p;
int i,j,ch=1;
while(ch!=0)
{
printf("\n");
printf("\n\t\t 串子系统 ");
printf("\n\t\t*********************************************");
printf("\n\t\t* 1------输 入 字 串 *");
printf("\n\t\t* 2------连 接 字 串 *");
printf("\n\t\t* 3------取 出 子 串 *");
printf("\n\t\t* 4------删 除 子 串 *");
printf("\n\t\t* 5------插 入 子 串 *");
printf("\n\t\t* 6------查 找 子 串 *");
printf("\n\t\t* 7------比较 串大小 *");
printf("\n\t\t* 8------显 示 字 串 *");
printf("\n\t\t* 0------返 回 *");
printf("\n\t\t*********************************************");
printf("\n\t\t 请选择菜单号(0--8): ");
scanf("%c",&choice);
getchar();
if(choice=='1')
{printf("\n\t\t请输入一个字符串:");
gets(r->vec);
r->len=LenStr(r);
}
else if(choice=='2')
{printf("\n\t\t请输入所要连接的串:");
r1=CreateStr(&b);
ConcatStr(r,r1);
printf("\n\t\t连接以后的新串值为:");
puts(r->vec);
}
else if(choice=='3')
{printf("\n\t\t请输入从第几个字符开始:");
scanf("%d",&i);getchar();
printf("\n\t\t请输入取出的连续字符数:");
scanf("%d",&j);
getchar();
SubStr(r,i,j);
}
else if(choice=='4')
{printf("\n\t\t请输入从第几个字符开始:");
scanf("%d",&i);getchar();
printf("\n\t\t请输入删除的连续字符数:");
scanf("%d",&j);
getchar();
DelStr(r,i-1,j);
}
else if(choice=='5')
{
printf("\n\t\t 请输入在第几个字符前插入: ");
scanf("%d",&i);
getchar();
printf("\n\t\t 请输入所要插入的字符串: ");
r1=CreateStr(&b);
InsStr(r,r1,i-1);
}
else if(choice=='6')
{
printf("\n\t\t 请输入所要查找的字符串: ");
r1=CreateStr(&b);
i=IndexStr(r,r1);
if(i!=-1)
printf("\n\t\t 第一次出现的位置是第%d个.\n",i+1);
else
printf("\n\t\t 该字串不在其中! \n");
}
else if(choice=='7')
{
printf("\n\t\t 请输入第一个串: ");
gets(c.vec);
printf("\n\t\t 请输入第二个串: ");
gets(d.vec);
int k=EqualStr(&c,&d);
if(k>0)
printf("\n\t\t第一个串大!\n");
else if(k<0)
printf("\n\t\t第二个串大!\n");
else
printf("\n\t\t两个串一样大!\n");
}
else if(choice=='8')
{printf("\n\t\t该串值为:");
if(r->vec[0]=='\0')
printf("空!\n");
else
puts(r->vec);
}
else if(choice=='0')
break;
else
printf("\n\t\t 请注意:输入有误!\n");
if(choice!='X'&&choice!='X')
{printf("\n\t\t按【Enter】键继续,按任意键返回主菜单.");
p=getchar();
if(p!='\xA')
{getchar();break;}
}
}
}
4.程序运行
5. 实验小结
本章要求我们掌握的是字符串的创建、连接、删除、显示、查找、取子串和比较字符串大小。
串的本质就是一种特殊的线性表,而它的数据元素是由一个个字符组成的。串的存储方式分为紧凑型和非紧凑型两种,同时也了解了两种字符串的不同之处。在这一章的学习中了解了很多知识,增加了见解,拓宽了视野。
在输入源代码的过程中巩固了串的运算,增强了记忆,在编译的过程中难免有错误,不过也正是这些错误将我不理解的地方都暴露出来了,让我可以知道自己的弱点,可以加强对知识的理解。这也是每次实验的目的。
所以,总的来说,本次实验还是成功的。
其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。
二.培训的及要求培训目的
安全生产目标责任书
为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标:
一、目标值:
1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。
2、现金安全保管,不发生盗窃事故。
3、每月足额提取安全生产费用,保障安全生产投入资金的到位。
4、安全培训合格率为100%。
二、本单位安全工作上必须做到以下内容:
1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。
2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。
3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。
4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。
5、在公司及政府的安全检查中杜绝各类违章现象。
6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。
7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。
8、虚心接受员工提出的问题,杜绝不接受或盲目指挥;
9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。
10、必须按规定对单位员工进行培训和新员工上岗教育;
11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。
三、 安全奖惩:
1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。
2、每月接受主管领导指派人员对安全生产责任状的落
展开阅读全文