串的基本操作的编程实现.docx
《串的基本操作的编程实现.docx》由会员分享,可在线阅读,更多相关《串的基本操作的编程实现.docx(14页珍藏版)》请在冰豆网上搜索。
串的基本操作的编程实现
数据结构双语班
DATASTRUCTUREBILINGUAL-TEACHINGCLASS
实验报告003批改单
ExperimentReportCommendatoryBill
指导老师评语COMMENDATORYOFTHETEACHER
签字:
串基本操作的编程实现
2006-2007
(2)学期T523-1班学号:
33姓名:
王娟
指导老师:
马春江时间:
2007.04.19
【实验目的】
内容:
串基本操作的编程实现
要求:
串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现,用菜单进行管理。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
验证性实验(学时数:
2H)
【实验内容】
可以只完成基本的功能演示程序。
也可以通过一个较为实用的系统下体现各种操作的作用,如可以开发一个文本统计程序,要求如下:
编写程序,进行字符串统计系统的设计
将存在txt文件中的文本进行统计:
字母数、标点符号数、单词数、句子数、段落数。
进一步的工作
(统计:
汉字数、每个单词的次数和所在行数等)
【详细设计】
#include
#include
#include
#defineMaxlen50
#include
usingnamespacestd;
typedefstruct
{
charch[Maxlen];
intlen;
}strtype;
voiddisp(strtype*s)//输出串
{
if(s->len==0)
cout<<"空串"<else
{for(inti=0;ilen;i++)
{
cout<ch[i];
}cout<}
voidcreate(strtype*s)//将普通字符串赋给串
{
charb,string[Maxlen]="";
intk=0;
cout<<"请输入一个字符串(以#结束)"<for(;;)
{
cin>>b;
if(b=='#')break;
string[k]=b;
k++;
}
char*str=string;
strcpy(s->ch,str);
s->len=strlen(str);
}
intlength(strtype*s)//求串的长度
{
returns->len;
}
voidcopy(strtype*s1,strtype*s2)//串的复制
{
inti;
for(i=0;ilen;i++)
s2->ch[i]=s1->ch[i];
s2->len=s1->len;
s2->ch[s2->len]='\0';//添加字符串结束符
}
voidsubs(strtype*s,intpos,intn)//求子串
{
inti;
strtypess;
strtype*sub=&ss;
if(pos+n-1>length(s))//参数不正确
cout<<"子串过长!
";
else
{
for(i=pos-1;isub->ch[i-pos+1]=s->ch[i];
sub->len=n;
sub->ch[sub->len]='\0';
disp(sub);
}
}
intconcat(strtype*s,strtype*t)//连接两个串
{
inti;
if((s->len+t->len)>Maxlen)
{
cout<<"连接失败!
"<return0;
}
for(i=0;ilen;i++)
s->ch[i+s->len]=t->ch[i];
s->len=s->len+t->len;
s->ch[s->len]='\0';
disp(s);
cout<<"连接成功!
"<return1;
}
intins(strtype*s,strtype*t,inti)//插入一个子串
{
intj;
if(s->len+t->len>Maxlen)
return0;
for(j=s->len-1;j>=i-1;j--)//i之后的所有元素后移t->len个位置
s->ch[j+t->len]=s->ch[j];
for(j=0;jlen;j++)
s->ch[j+i-1]=t->ch[j];
s->len=s->len+t->len;
s->ch[s->len]='\0';
return1;
}
strtypereplace(strtype*s1,strtype*s2,inti,intj)//串的等长替换
{
strtypes;
intn,k;
if(i+j-1len)
{
for(n=0;ns.ch[n]=s1->ch[n];
for(n=0;nlen;n++)
s.ch[i+n-1]=s2->ch[n];
s.len=i+s2->len-1;
for(n=s.len,k=i+j-1;klen;n++,k++)
s.ch[n]=s1->ch[k];
s.len=n;
s.ch[s.len]='\0';
s1=&s;
disp(s1);
}
else
{
s.ch[0]='\0';
s.len=0;
}
returns;
}
intdel(strtype*s,intpos,intn)//删除一个子串
{
inti;
if(pos+n>s->len)
{cout<<"长度过长,删除失败!
"<for(i=pos+n-1;ilen;i++)
s->ch[i-n]=s->ch[i];
s->len=s->len-n;
s->ch[s->len]='\0';
return1;
}
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////菜单///////////////////////////////////////////
voidmenu()
{
char*p[]={"",
"",
"",
"",
"",
"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳━━┓",
"┃^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨┠设┨┠计┨^_^┃",
"┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃",
"┣━━━━━━━━任意进制数据的相互转换━━━━━━━━━┫",
"┃程序功能:
┃",
"┃┃",
"┃本程序实现字符串的基本操作。
┃",
"┃┃",
"┃0.退出程序。
(按其他键继续)┃",
"┃┃",
"┃┃",
"┃┃",
"┃OO════∩════OO指导老师:
马春江┃",
"┃湖北汽车工业学院作者:
王娟┃",
"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮QQ:
550361098┃",
"┃ ╰═▃_电气工程系∠════▔▔▔┃",
"┃*:
-.,,.-:
*``*:
-.,,.-:
*``*:
-.,,.-:
*``*:
-.,,.-:
*,,┃",
"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮*:
-.,,.-:
*,、☆*:
-.,┃",
"┃║双║║语║║班║║天║║地║★*:
-.,┃",
"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘┃",
"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
};
inti,j;
for(i=20;i>=0;i--)
{
system("cls");
for(j=i;j<=25;j++)
{
cout<<"\t"<
}
Sleep(150);
}
}
voidmenu2()
{
char*p[]={"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳━━┓",
"┃^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨┠设┨┠计┨^_^┃",
"┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃",
"┣━━━━━━━━字符串的基本操作实现━━━━━━━━━┫",
"┃程序功能:
┃",
"┃┃",
"┃本程序实现字符串的基本操作┃",
"┃┃",
"┃0.退出程序。
(按其他键继续)┃",
"┃1.清屏┃",
"┃2.求串的长度┃",
"┃3.串的复制┃",
"┃4.求子串┃",
"┃5.连接两个串┃",
"┃6.串的插入操作┃",
"┃7.串的等长替换┃",
"┃8.串的删除操作┃",
"┃9.输出一个串┃",
"┃┃",
"┃┃",
"┃OO════∩════OO指导老师:
马春江┃",
"┃湖北汽车工业学院作者:
王娟┃",
"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮QQ:
550361098┃",
"┃ ╰═▃_电气工程系∠════▔▔▔┃",
"┃*:
-.,,.-:
*``*:
-.,,.-:
*``*:
-.,,.-:
*``*:
-.,,.-:
*,,┃",
"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮*:
-.,,.-:
*,、☆*:
-.,┃",
"┃║双║║语║║班║║天║║地║★*:
-.,┃",
"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘┃",
"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
};
inti;
system("cls");
for(i=0;i<=28;i++)
{
cout<<"\t"<
}
}
/////////////////////////////////////////////////////////////////////////////////
///////////////////////////main//////////////////////////////////////////////////
voidmain()
{
menu();
strtypet1,t2;
strtype*s1=&t1,*s2=&t2;
charch,str1[Maxlen]="",str2[Maxlen]="";
inti,j=0,k=0,n,pos;
cin>>ch;
if(ch=='0')exit(0);
menu2();
char*str01=str1,*str02=str2;
cout<<"字符串的赋初值"<create(s1);
disp(s1);
cout<for(;;)
{
cout<";
cin>>ch;
switch(ch)
{
case'0':
exit(0);
case'1':
system("cls");menu2();
break;
case'2':
cout<<"求串的长度"<cout<<"长度是:
"<break;
case'3':
cout<<"串的复制"<copy(s1,s2);
disp(s2);
cout<<"复制成功!
"<break;
case'4':
cout<<"求子串"<cout<<"输入位置"<cin>>pos;
cout<<"输入长度"<cin>>n;
subs(s1,pos,n);
break;
case'5':
cout<<"两个串的连接"<create(s2);
disp(s1);
disp(s2);
concat(s1,s2);
break;
case'6':
cout<<"串的插入操作"<cout<<"输入插入位置:
";
cin>>i;
create(s2);
ins(s1,s2,i);
disp(s1);
break;
case'7':
cout<<"串的等长替换"<cout<<"输入替换位置:
";
cin>>i;
cout<<"输入长度:
";
cin>>j;
create(s2);
replace(s1,s2,i,j);
break;
case'8':
cout<<"串的删除操作"<cout<<"输入删除子串起始位置:
";
cin>>pos;
cout<<"输入删除子串的长度:
";
cin>>n;
del(s1,pos,n);
disp(s1);
break;
case'9':
cout<<"输出一个串"<disp(s1);
break;
default:
cout<<"输入无效菜单命令"<}
}
}
【用户手册】
【心得体会】
本次实验,通过上机对串的基本操作有了更深刻的了解。
关键是本次实验完全是自己所编。
在编程过程中,会有很多错误,但都通过翻阅书籍或看范例,得以一一改正,获益不小。
这也更加增强了我学好数据结构的信心。
相信以后会编出更好的程序。
对串的逻辑结构、存储结构和基本操作的算法设计都有了一定的掌握,了解到串在高级语言中可以广泛应用,如在学号、职工编号、设备编号等,它们不应该是整数处理而应该是字符串处理,都要用到字符串的基本操作。