微型计算机原理实验一-串操作
数据结构串的基本操作及应用实验报告

实验日期2010.5.10 教师签字成绩实验报告【实验名称】第四章串的基本操作及应用【实验目的】1、熟悉将算法转换成程序代码的过程。
2、了解串的逻辑结构特性,熟练掌握串顺序存储结构的C 语言描述方法。
3、熟练掌握串的基本操作:求长度、串的连接、插入、删除等,掌握串的存取特性。
【实验原理】1.串可以可以有三种存储方式,分别为顺序存储、堆分配存储、链式存储,串的基本操作在这三种存储方式下操作。
2.串的模式匹配KMP算法在每一趟匹配过程中出现字符不等时,不需回溯指针,而是利用已经得到的部分匹配结果的结果将模式向右滑动尽可能远的一段距离,继续进行比较。
【实验内容】1.串的顺序存储表示及基本操作(插入、删除、求串长、合并连接串、求子串、串比较等)#include<stdio.h>#include<iostream.h>#include<malloc.h>#include<string.h>#define SIZE 20struct HString{char ch[SIZE];int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos<1||pos>s.length+1)cout<<"ERROR!";if(t.length){for(i=s.length-1;i>=pos-1;--i)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1;j++)s.ch[pos-1+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos,int len){int i;int v=pos-1;if(pos<1||pos>s.length||len<0||len>s.length-pos+1)cout<<"ERROR!";for(i=pos+len-1;i<=s.length-1;i++)s.ch[v++]=s.ch[i];s.length-=len;}void StrAssign(HString &t,char chars[]){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.length=0;}else{for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}int StrLen(HString &s){return s.length;}int StrCompare(HString &s,HString t){for(int i=0;i<s.length&&i<t.length;i++){if(s.ch[i]!=t.ch[i])return (int)(t.ch[i]-s.ch[i]);}return s.length-t.length;}void Concat(HString &t,HString s1,HString s2){int i=s1.length+s2.length;for(i=0;i<s1.length;i++)t.ch[i]=s1.ch[i];t.length=s1.length+s2.length;for(i=s1.length;i<t.length;i++)t.ch[i]=s2.ch[i-s1.length];}int SubString(HString &sub,HString s,int pos,int len) {if(pos<1||pos>s.length||len<0||len>s.length-pos+1) {cout<<"ERROR!"<<endl;return 0;}if(!len){sub.length=0;}else{int i=len;for(i=0;i<len;i++)sub.ch[i]=s.ch[pos+i-1];sub.length=len;}}void Display(HString &t){for(int i=0;i<=t.length-1;i++)cout<<t.ch[i];cout<<endl;}void main(){int i;char s[20];do{cout<<"选择您要进行的串的基本操作:"<<endl;cout<<"1.插入"<<endl<<"2.删除"<<endl<<"3.串连结"<<endl<<"4.取子串"<<endl<<"5.串比较"<<endl<<"6.求串长"<<endl<<"7.结束"<<endl;cin>>i;switch(i){case 1:{HString s,t;int pos;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<endl;cout<<"请输入要插入的串t:";cin>>t.ch;StrAssign(t,t.ch);cout<<endl;cout<<"请输入你所要插入的位置:";cin>>pos;StrInsert(s,pos,t);cout<<"插入之后串变为:";Display(s);break;}case 2:{HString s;int pos,len;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入你所要删除串的首位置为:";cin>>pos;cout<<"请输入你需要删除的串的长度:";cin>>len;StrDelete(s,pos,len);cout<<"删除之后串变为:";Display(s);break;}case 3:{HString s1,s2,t;cout<<"请输入串s1:";cin>>s1.ch;StrAssign(s1,s1.ch);cout<<"请输入串s2:";cin>>s2.ch;StrAssign(s2,s2.ch);Concat(t,s1,s2);cout<<"s1与s2合并后的串为:";Display(t);break;}case 4:{HString sub,s;int pos,len;cout<<"请输入主串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入所取原串的起始位置pos:";cin>>pos;cout<<"请输入子串的长度len:";cin>>len;SubString(sub,s,pos,len);cout<<"取出的子串为:";Display(sub);break;}case 5:{HString s,t;int value;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入串t:";cin>>t.ch;StrAssign(t,t.ch);value=StrCompare(s,t);if(value>0) cout<<"串s大于串t"<<endl;else if(value==0) cout<<"串s等于串t"<<endl;else cout<<"串s小于串t"<<endl;cout<<endl;break;}case 6:HString s;char *chars;int val;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);val=StrLen(s);cout<<"串的长度为:"<<val<<endl;break;case 7:cout<<"操作结束!"<<endl;break;default:cout<<"输入错误!请重新输入!"<<endl;break;}}while(i!=7);}2.串的堆分配存储表示及基本操作(插入、删除、求串长、合并连接串、求子串、串比较等)#include<stdio.h>#include<iostream.h>#include<malloc.h>#include<string.h>struct HString{char *ch;int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos<1||pos>s.length+1)cout<<"ERROR!";if(t.length){s.ch=(char*)realloc(s.ch,(s.length+t.length)*sizeof(char));for(i=s.length-1;i>=pos-1;--i)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1;j++)s.ch[pos-1+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos,int len){int i;int v=pos-1;if(pos<1||pos>s.length||len<0||len>s.length-pos+1)cout<<"ERROR!";for(i=pos+len-1;i<=s.length-1;i++)s.ch[v++]=s.ch[i];s.length-=len;}void StrAssign(HString &t,char *chars){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.ch=NULL;t.length=0;}else{t.ch=(char *)malloc(i*sizeof(char));for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}int StrLen(HString &s){return s.length;}int StrCompare(HString &s,HString t){for(int i=0;i<s.length&&i<t.length;i++){if(s.ch[i]!=t.ch[i])return (int)(t.ch[i]-s.ch[i]);}return s.length-t.length;}void Concat(HString &t,HString s1,HString s2){int i=s1.length+s2.length;t.ch=(char *)malloc(i*sizeof(char));for(i=0;i<s1.length;i++)t.ch[i]=s1.ch[i];t.length=s1.length+s2.length;for(i=s1.length;i<t.length;i++)t.ch[i]=s2.ch[i-s1.length];}int SubString(HString &sub,HString s,int pos,int len){if(pos<1||pos>s.length||len<0||len>s.length-pos+1){cout<<"ERROR!"<<endl;return 0;}if(!len){sub.ch=NULL;sub.length=0;}else{int i=len;sub.ch=(char *)malloc(i*sizeof(char));for(i=0;i<len;i++)sub.ch[i]=s.ch[pos+i-1];sub.length=len;}}void Display(HString &t){for(int i=0;i<=t.length-1;i++)cout<<t.ch[i];cout<<endl;}void main(){int i;char s[20];cout<<"选择您要进行的串的基本操作:"<<endl;do{cout<<"1.插入"<<endl<<"2.删除"<<endl<<"3.串连结"<<endl<<"4.取子串"<<endl<<"5.串比较"<<endl<<"6.求串长"<<endl<<"7.结束"<<endl;cin>>i;switch(i){case 1:{HString s,t;char a[20],b[20];char *sa,*sb;int pos;cout<<"请输入串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<endl;cout<<"请输入要插入的串t:";cin>>b;sb=b;StrAssign(t,sb);cout<<endl;cout<<"请输入你所要插入的位置:";cin>>pos;StrInsert(s,pos,t);cout<<"插入之后串变为:";Display(s);break;}case 2:{HString s;char str[20];char *chars;int pos,len;cout<<"请输入串s:";cin>>str;chars=str;StrAssign(s,chars);cout<<"请输入你所要删除串的首位置为:";cin>>pos;cout<<endl;cout<<"请输入你需要删除的串的长度:";cin>>len;cout<<endl;StrDelete(s,pos,len);cout<<"删除之后串变为:";Display(s);break;}case 3:{HString s1,s2,t;char a[20],b[20];char *sa,*sb;cout<<"请输入串s1:";cin>>a;sa=a;StrAssign(s1,sa);cout<<"请输入串s2:";cin>>b;sb=b;StrAssign(s2,sb);Concat(t,s1,s2);cout<<"s1与s2合并后:";Display(t);break;}case 4:{HString sub,s;char a[20];char *sa;int pos,len;cout<<"请输入主串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<"请输入所取原串的起始位置pos:";cin>>pos;cout<<"请输入子串的长度len:";cin>>len;SubString(sub,s,pos,len);cout<<"该子串为:";Display(sub);break;}case 5:{HString s,t;int value;char a[20],b[20];char *sa,*sb;cout<<"请输入串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<"请输入串t:";cin>>b;sb=b;StrAssign(t,sb);value=StrCompare(s,t);if(value>0) cout<<"串s大于串t"<<endl;else if(value==0) cout<<"串s等于串t"<<endl;else cout<<"串s小于串t"<<endl;cout<<endl;break;}case 6:HString s;char str[20];char *chars;int val;cout<<"请输入串s:";cin>>str;chars=str;StrAssign(s,chars);val=StrLen(s);cout<<"串的长度为:"<<val<<endl;break;case 7:cout<<"操作结束!"<<endl;break;default:cout<<"输入错误!请重新输入!"<<endl;break;}}while(i!=7);3.KMP算法的C实现#include<iostream.h>#include<malloc.h>#include<string.h>struct HString{char *ch;int length;};void StrAssign(HString &t,char *chars){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.ch=NULL;t.length=0;}else{t.ch=(char *)malloc(i*sizeof(char));for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}void get_next(HString s,int next[]){int i,j;i=1;j=0;next[1]=0;while(i<s.length){if(j==0||s.ch[i-1]==s.ch[j-1]){i++;j++;next[i]=j;}else j=next[j];}for(i=1;next[i]!='\0';i++)cout<<next[i]<<" ";}int Index(HString s,HString t,int pos){int i=pos;int j=1;int next[20];get_next(t,next);while(i<=s.length&&j<=t.length){if(s.ch[i-1]==t.ch[j-1]||j==0){ ++i;++j;}else{j=next[j];}}if(j>t.length)return i-t.length;else return 0;}void Display(HString t){for(int i=0;i<t.length;i++)cout<<t.ch[i];cout<<endl;}void main(){ HString s,t;int pos,k;char a[20],b[20];char *sa,*sb;cout<<"请输入主串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<"请输入模式串t:";cin>>b;sb=b;StrAssign(t,sb);cout<<"请输入起始位置pos:";cin>>pos;k=Index(s,t,pos);if(k==0)cout<<"匹配失败!"<<endl<<endl;else{cout<<"从第"<<k<<"个位置开始匹配"<<endl;Display(s);for(int i=1;i<k;i++)cout<<" ";Display(t);}}【小结讨论】1. 此程序关键在于位置查询,由于对C语言函数的陌生导致问题变的繁琐,自己的C语言水平有待提高。
北航微机原理实验报告——字符串排序

一、实验名称:字符串排序二、实验目的:⑴学习利用系统功能调用的“INT 21H”进行字符的输入、字符串的显示方法,熟悉排序相关指令及方法。
⑵掌握汇编语言的编写、编译、连接及运行方法。
三、实验内容:①利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束。
②将输入的字符串存放在数据段中。
③对输入的字符串按ASCⅡ码从小到大排序(ASCⅡ码小者占低地址存放)。
④将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。
四、程序流程图:定义堆栈段、数据段分配各段调用输入程序,输入并存储一个字符NO输入是否为回车键YES冒泡法对存储单元中的内容排序使用INT 21H的9号功能,将排好序的字符串输出返回DOS五、结论:六、实验心得:通过实验,首先,我进一步理解学习了冒泡法排序的具体过程:冒泡法的外层循环次数等于其排序总数减一,每层内循环次数等于外循环总数减去已执行的次数。
第二,在编写程序时,如若程序太长,最好将一段反复使用的程序段编成子程序,在主程序中反复调用即可。
第三,在使用INT 21H的各种功能时,要注意将功能号值付给AH,并需正确使用入口、出口参数。
最后,堆栈段、数据段使用时要特别注意,堆栈段必须重新定义,程序中使用数据段时也要对数据段进行重新定义,否则程序将产生错误。
附:程序清单STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDA TA SEGMENTX DB 100 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKMAIN PROCMOV AX,DA TAMOV DS,AXMOV SI,OFFSET XCALL INPUTSUB SI,2MOV BX,SINEXT3:MOV CX,BXMOV SI,OFFSET XNEXT2:MOV AL,[SI]CMP AL,[SI+1]JBE NEXT1XCHG AL,[SI+1]MOV [SI],ALNEXT1:INC SILOOP NEXT2DEC BXJNZ NEXT3MOV DX,OFFSET XMOV AH,9INT 21HMOV AH,4CHINT 21HMAIN ENDPINPUT PROCSTART:MOV AH,1INT 21HMOV [SI],ALINC SICMP AL,0DHJNZ STARTMOV BYTE PTR [SI-1],'$'RETINPUT ENDPCODE ENDSEND MAIN。
串操作实验报告

串操作实验报告
《串操作实验报告》
实验目的:通过对串操作的实验,掌握串的基本操作方法,提高对串操作的理解和掌握。
实验材料:计算机、编程软件、实验指导书。
实验步骤:
1. 字符串的输入输出:首先,我们学习了如何通过编程软件向计算机输入字符串,并且通过编程实现将字符串输出到屏幕上。
这一步骤帮助我们了解了如何使用编程语言来操作字符串。
2. 字符串的拼接:接着,我们学习了如何将两个字符串进行拼接。
通过实验,我们发现可以通过简单的加号操作符来实现字符串的拼接,这为我们在日后的编程中提供了很大的便利。
3. 字符串的截取:在实验中,我们还学习了如何通过编程语言来截取字符串的部分内容。
这一步骤让我们对于字符串的操作更加灵活,可以根据需要来截取所需的内容。
4. 字符串的比较:最后,我们学习了如何通过编程语言来比较两个字符串的内容。
这一步骤让我们对于字符串的比较有了更深入的理解,可以通过比较来判断字符串是否相等,或者哪个字符串的内容更大。
实验结果:通过这次实验,我们对于串操作有了更加深入的理解和掌握。
我们可以通过编程语言来实现对字符串的输入输出、拼接、截取和比较等操作,为日后的编程工作打下了坚实的基础。
结论:串操作是编程中非常重要的一部分,通过这次实验,我们对于串操作有
了更加深入的理解和掌握。
希望在日后的编程工作中能够更加灵活地运用串操作,提高编程效率和质量。
微型计算机原理及应用实验报告1

太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师实验名称同组人、实验目的:学习数据传送和算数运算指令的用法二、实验.内睿;将两个多位土进制数…28056,47193相加.,并显示加数,…被加数,和。
要求两个加数均以……一Asc n码形式各自顺序存放在DATA2 一内存单元中,结果送回…—DATA仁处(低位在前,高位在后)一…。
三、程序流程图:I开始I计数值呂YX执行ADC带进位相加■-J7AAA调整将十六谜制的结果转化为ASCH码義示的数字串I结束I四、程序列表:SHOW . _ MACRO B...…_MOV DL,B. _ ….专业班级学号姓名成绩实验一多位土进制数相加程序DATA1 禾口I显示被加犁和加数I将被加数和加数由ASCH码转化为■!■六进韵INT 21HENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32HDATA3 DB'_',0DH,0AH,'$'DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP⑺TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,T OPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05SHOW 20HCALL DIS PLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV BX,05SHOW 2BHCALL DIS PLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSHOW 0AHMOV 一SI,OFFSET .DATA!MOV DI,OFFSET DATA2CALL ADDAMOV 一SI,OFFSET .DATA!MOV BX,05CALL DIS PLMPVAX,4C00HINT 21HDIS PL P ROC NEARDS1: _ —SHOW丄S+BX二1]DEC BXJNZ DS1RETDIS PL END PADDA P ROC NEARMOV DX,SIMOV_BP,DI .MOV BX,05AD1: SUB BYTE PTR [SI+BX-1],30HSUB BYTE _ PTR」Dl+BX-1L30H_DEC BXJNZ AD1MOV SI,DXMOV DI,B PMOV CX,05CLCAD2: _ MOV AL,创MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,B P…_ MOV 一BX,_05___________ _AD3: ADD BYTE PTR [SI+BX-1],30H …_ADD BYTE_ PTR. [D !+BX-1L30_H 一一一DEC BX JNZ AD3RETADDA ENDPCODE ENDSEND START截图:g C: \TlVl>CTS\fyste>32\c>d. exe - edit j taf a.&SBiSHOU MACRO B F_^L*i ■.Ld.j.'jj Kn r T-.T ■- r*-c- lu £11 i1 1 nOU DL,BMOO AH.02H INT 21HENDH SEGHEMTDB 33H,39H,31H,37H ,34H!DATA2 DD 3GH^35H^30H^38H p32H:PnTA3 DB* ,0DH,0nH,*S'iDATA ENDSiSTACK SECriENT STACKiSTA DB 20 DUP<?>STOP EQU LENGTH STAiSTACK ENDSiCODE SEGMENT!ASSUME CS:CODE.DS:DATA,£S:STACK,ESzDATAiSTfiRT: MW 做DA"!NOU DS,AX!nOU AX.STACK!no<j 5S.HK!nou AX,TOP!MW SP.flX I File Edit Search Uiew 0诚ions He Ip芮I C:MIJTDOlS^syst fi»32\c»d, eieE:\nASri>HL JEAFA.ASnILcrosof t <H> tlacPD AssBnbler Uers ion &.15.BBB3Corp 1981 All rights resArued^Cnpijright <C> Mici^nsoFtAssenbling: J]APA,A&tlUcrosoft <R>Segnented :npyright <C> tlicrDsoft Executable Linker UeFwlon S.31.009 Jul 13 1992 Corp 1904-1992. All rights reserved.Object nodules f-obj]:JlAF«,obj Run File [J1AFft.exe]: "JlftFfl,exe" List File Lnul,iiHip]: NULLibraries t.Lih]:Def in It Ians Filt [tiul.def ]:E;\nASM>JTAFA.EKE+4719375249EJ\nflSJ1>。
微型计算机原理与接口技术实验指导3

实验三数据串传送和查表程序实验目的:通过实验掌握下列知识:1.执行串操作指令前要做哪些准备工作(设置哪些寄存器)?2.串传送、串比较、串扫描等指令及重复前辍REP、REPZ、REPNZ等。
实验内容及步骤:一、利用查表方法把DX的内容(16进制数)转换成ASCII码:1. 用A命令键入下列程序:MOV BX,1000MOV DI,2000MOV CX,4LOP: PUSH CXMOV CL,4ROL DX,CLPOP CXMOV AL,DLAND AL,OFXLATCLDSTOSBLOOP LOPINT 202. 用A命令在1000H处键入下列ASCII码并用D命令检查之:DB `0 1 2 3 4 5 6 7 8 9 A B C D E F'用D命令检查时注意左边的ASCII码值和右边的字符。
3. 用R命令给DX送一个四位的16进制数(例7F8E)。
4. 用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)5. 用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。
可注意屏幕右边的ASCII字符与DX是否一致。
二、数据串搬家程序:1. 用A命令键入下列程序:MOV SI,1000MOV DI,1500MOV CX,0FLOP: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP LOPINT 202. 用A命令DB伪指令在1000H键入下列字符串:‘IBM_PC COMPUTER'3. 用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。
4. 若此程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。
三、段寄存器概念及字符串传送指令练习:1. 用A命令键入下列程序:MOV SI,0MOV DI,0MOV AX,1000MOV DS,AXMOV AX,1500MOV ES,AXMOV CX,0FCLDREP MOVSBINT 202. 用A命令DB伪指令在1000:0000处键入字符串'IBM_PC COMPUTER',并用D命检查之3. 用D命令检查0F00:1000处内容,看是否一样。
微型计算机原理及应用实验

YANGTZE NORMAL UNIVERSITY
实验2 实验2 算术运算程序设计
一、实验目的
✿ 掌握汇编语言中的数值接收方法; 掌握汇编语言中的数值接收方法; ✿ 掌握算术运算程序的编写与结果显示方法; 掌握算术运算程序的编写与结果显示方法; ✿ 掌握宏定义与调用方法
二、实验内容
从键盘接收运算式,编程实现两位十进制数的算术运算( 从键盘接收运算式,编程实现两位十进制数的算术运算( ),若输入的不是数字或运算符 若输入的不是数字或运算符, 加、减、乘、除),若输入的不是数字或运算符,进行错误处 Esc键退出 键退出。 理,按Esc键退出。
✿ 掌握在磁盘上建立文件夹的程序设计方法; 掌握在磁盘上建立文件夹的程序设计方法; ✿ 掌握在文件夹下建立文件的程序设计方法; 掌握在文件夹下建立文件的程序设计方法; ✿ 掌握对文件的读、写、关闭的程序设计方法 掌握对文件的读、
YANGTZE NORMAL UNIVERSITY
二、实验内容
✿ 编程实现文件、文件夹的建立、写入、字符串接收等基本操 编程实现文件、文件夹的建立、写入、 作; ✿ 具体要求: 具体要求: 清屏,将光标置于5 从键盘接收最多80 80个字符的字 ①清屏,将光标置于5行,0列,从键盘接收最多80个字符的字 符串,将接收字符串中的小写字母全部转换成大写, 符串,将接收字符串中的小写字母全部转换成大写,其余不 变; 10行 列开始显示转换后的字符串; ②从10行,0列开始显示转换后的字符串; 盘上建立一文件夹USER USER; ③在D盘上建立一文件夹USER; ④将转换后的字符串写入文件'D:\USER\STRING.TXT中。 将转换后的字符串写入文件'D:\USER\STRING.TXT中 'D: 文件操作时要求有相应的提示信息) (注:文件操作时要求有相应的提示信息)
串操作实验报告

竭诚为您提供优质文档/双击可除串操作实验报告篇一:顺序串的基本操作实验报告宁波工程学院电信学院计算机教研室实验报告课程名称:数据结构实验项目:顺序串的基本操作实验人员:徐浩学号:10401010209班级:计科102指导教师:宋宏图实验位置:计算机中心二楼实验日期:20XX-10-13一、实验目的1)熟悉串的定义和串的基本操作。
2)掌握顺序串的基本运算。
3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。
二、实验环境装有Visualc++6.0的计算机。
本次实验共计2学时。
三、实验内容编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。
具体如下:编写栈的基本操作函数顺序串类型定义如下所示:typedefstruct{charch[mAxsIZe];intlen;}seqstring;(1)串赋值Assign(s,t)?将一个字符串常量赋给串s,即生成一个其值等于t的串s(2)串复制strcopy(s,t)?将串t赋给串s(3)计算串长度strLength(s)?返回串s中字符个数(4)判断串相等strequal(s,t)?若两个串s与t相等则返回1;否则返回0。
(5)串连接concat(s,t)?返回由两个串s和t连接在一起形成的新串。
(6)求子串substr(s,i,j)?返回串s中从第i(1≤i≤strLength((:串操作实验报告)s))个字符开始的、由连续j个字符组成的子串。
(7)插入Insstr(s,i,t)?将串t插入到串s的第i(1≤i≤strLength(s)+1)个字符中,即将t的第一个字符作为s的第i个字符,并返回产生的新串(8)串删除Delstr(s,i,j)?从串s中删去从第i(1≤i≤strLength(s))个字符开始的长度为j的子串,并返回产生的新串。
(9)串替换Repstr(s,s1,s2)?在串s中,将所有出现的子串s1均替换成s2。
(10)输出串Dispstr(s)?输出串s的所有元素值(11)判断串是否为空Isempty(s)编写主函数调用上述函数实现下列操作:(1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk”(2)复制串t到t1,并输出t1的长度(3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2(4)删除s第2个字符开始的5个字符而产生串s3,并输出s3(5)将串s第2个字符开始的3个字符替换成串s1而产生串s4,s4(6)提取串s的第8个字符开始的4个字符而产生串s5,并输出s5(7)将串s1和串t连接起来而产生串s6,并输出s6 (8)比较串s1和s5是否相等,输出结果程序:#include#definemAxsIZe100typedefstruct{charch[mAxsIZe];intlen;}sqstring;voidstrAssign(sqstringfor(i=0;t[i]!=\0;i++)s.ch[i]=t[i];s.len=i;}voidstrcopy(sqstring并输出for(i=0;i s.ch[i]=t.ch[i];s.len=t.len;}voidstrequal(sqstrings,sqstringt){//判断串相等intsame=1,i;if(s.len!=t.len){same=0;}else{for(i=0;i if(s.ch[i]!=t.ch[i]){same=0;break;}}if(same==0)printf("s1,s5不相等");elseprintf("s1,s5相等");printf("\n");}voidstrLength(sqstrings){//计算串长度printf("t1的长度:");printf("%d",s.len);printf("\n");}sqstringconcat(sqstrings,sqstringt){//串连接sqstringstr;inti;str.len=s.len+t.len;for(i=0;i str.ch[i]=s.ch[i];for(i=0;i str.ch[s.len+i]=t.ch[i];returnstr;}sqstringsubstr(sqstrings,inti,intj){//求子串sqstringstr;intk;str.len=0;if(is.len||js.len)returnstr;for(k=i-1;k str.ch[k-i+1]=s.ch[k];str.len=j;returnstr;}sqstringInsstr(sqstrings1,inti,sqstrings2){//插入intj;sqstringstr;str.len=0;if(is1.len+1)returnstr;for(j=0;j str.ch[j]=s1.ch[j];for(j=0;j str.ch[i+j-1]=s2.ch[j];for(j=i-1;j str.ch[s2.len+j]=s1.ch[j];str.len=s1.len+s2.len;returnstr;}sqstringDelstr(sqstrings,inti,intj){//删除intk;sqstringstr;str.len=0;if(is.len||i+j>s.len+1)returnstr;for(k=0;k str.ch[k]=s.ch[k];for(k=i+j-1;k str.ch[k-j]=s.ch[k];str.len=s.len-j;returnstr;sqstringRepstr(sqstrings,inti,intj,sqstringt){//替换intk;sqstringstr;str.len=0;if(is.len||i+j-1>s.len)returnstr;for(k=0;k str.ch[k]=s.ch[k];for(k=0;k str.ch[i+k-1]=t.ch[k];for(k=i+j-1;k str.ch[t.len+k-j]=s.ch[k];str.len=s.len-j+t.len;returnstr;}voidDispstr(sqstrings){//输出串所有元素inti;if(s.len>0){for(i=0;i printf("%c",s.ch[i]);printf("\n");}}voidIsempty(sqstrings){//判断串是否为空if(s.len>0)printf("串不为空");elseprintf("串为空");printf("\n");}篇二:串实验报告篇三:字符串实验报告数据结构字符串实验班级:计算机应用技术10-1学号:10602101048姓名:姚福刚一、实验目的及要求:掌握有关字符串的基本操作和存储结构,并编写相应的基本操作算法。
微机原理:串操作存储器访问实验

实验五:串操作存储器访问实验实验环境PC机+Win 2003+emu8086 学号姓名182054424 王锐一.实验项目要求基本要求:1.实现存储器串操作访问2.编程实现安全的串拷贝功能扩展要求:1.源串与目的串有重叠的处理方法源串在低地址,目的串在高地址的移动,从尾部开始移动思考题:1.如何提高操作速度二.理论分析或算法分析(含实验项目要求的分析、数学或逻辑推导等)1.将s2复制到s1的位置2.从s1复制到s2+4的位置具体步骤:1.计数器计数16个字符2.把源赋给源地址寄存器3.把第一个地址赋值给目的寄存器4.调用移动子程序三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)1.第一次移动:SI>DI,从前往后进行串操作即可2.第二次移动SI<DI,要改变移动的方向,从后往前3.源代码如下;首先,将s2复制到s1的位置;从s1复制到s2+4的位置;主程序mov CX, 16 ;计数器 16个字符mov SI, strs ;把源赋给源地址寄存器mov DI, std1 ;把第一个地址赋值给目的寄存器call memmove ;调用内存移动mov CX, 16mov SI, std1mov DI, std2call memmovejmp $s1 db 4 dup(0) ;空四个字节位置s2 db "0123456789ABCDEF" ;源字符串s3 db 10 dup(0) ;空十个字节位置;位置定义strs equ offset s2std1 equ offset s1std2 equ offset s2+4memmove proc nearcmp SI, DI ;比较je jendcld ;方向标志清零,默认从前往后ja j1 ;从前往后std ;方向改变add SI, CXadd DI, CXdec SIdec DIj1: rep movsb ;串操作jend:retmemmove endp四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等,如果有引用的参考文献,安排在本节最后列出)第一次移动结束截图如下第二次移动结束截图如下思考题若CX>=2,将movesb变为movesw若CX是奇数,最后一个字节额外处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三串操作
一、实验目的
1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
二、实验预习要求
1.复习8086指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.输入以下程序段并运行之,回答后面的问题。
CLD
MOV DI,1000H
MOV AX,55AAH
MOV CX,10H
REP STOSW
上述程序段执行后:
(1)从DS:1000H开始的16个字单元的内容是什么?55AAH
(2) (DI)= 1020H(CX)= 0000H,并解释其原因。
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOV SI,1000H
MOV DI,2000H
MOV CX,20H
REP MOVSB
程序段执行后:
(1) 从DS:2000H开始的16个字单元的内容是什么?55AAH
(2) (SI)= 1020H,(DI)= 2020H,(CX)= 0000H,并分析之。
3.在以上两题的基础上,再输入以下三个程序段并依次运行之。
程序段1:
MOV SI,1000H
MOV DI,2000H
MOV CX,10H
REPZ CMPSW
程序段1执行后:
(1) ZF=1 根据ZF的状态,你认为两个串是否比较完了?
(2)(SI)= 1020H,(DI)= 2020H,(CX)=0000H,并分析之。
程序段2:
MOV [2008H],4455H
MOV SI,1000H
MOV DI,2000H
MOV CX,10H
REPZ CMPSW
程序段2执行后:
(1) ZF=0 根据ZF的状态,你认为两个串是否比较完了?
(2)(SI)= 100AH,(DI)=200AH,(CX)= 000BH,并分析之。
程序段3:
MOV AX,4455H
MOV DI,2000H
MOV CX,10H
REPNZ SCASW
程序段3执行后:
(1) ZF=?根据ZF的状态,你认为在串中是否找到了数据4455H?
(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
4.从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。
MOV SI,1000FH
四、实验报告要求
1.简要说明执行串操作指令之前应初始化哪些寄存器和标志位。
2.总结串操作指令的用途及使用方法。