微型计算机原理实验一-串操作
数据结构串的基本操作及应用实验报告
实验日期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.串的基本操作4.实验步骤1. 串的定义串是由零个或多个字符组成的有限序列。
在计算机中,串常用于表示文本。
每个字符都有一个对应的ASCII码,可以进行字符的比较、连接和复制等操作。
2. 串的存储结构串的存储结构有两种:顺序存储和链式存储。
2.1 顺序存储顺序存储是将串的字符连续存储在一块连续的存储区域中。
可以使用字符数组来实现顺序存储,数组的每个元素存储一个字符。
2.2 链式存储链式存储是使用链表来存储串的字符。
链表的每个节点存储一个字符,节点之间通过指针连接。
3. 串的基本操作串的基本操作包括初始化、长度、比较、连接和复制等。
3.1 初始化初始化串可以通过赋值或输入的方式进行。
3.2 长度获取串的长度可以通过遍历计算字符的个数。
3.3 比较串的比较可以按照ASCII码逐个字符比较,若对应位置的字符不相等,则可以得出结果。
3.4 连接串的连接可以将多个串按照顺序连接成一个新的串。
3.5 复制串的复制可以将一个串的内容复制到另一个串中。
4. 实验步骤4.1 实验材料和工具•计算机•编程语言(如C、Java等)4.2 实验流程1.按照实验要求准备实验材料和工具。
2.根据串的定义和存储结构,选择适当的数据结构实现串。
3.实现串的基本操作,并进行功能测试。
4.编写实验报告,总结实验结果和心得体会。
实验总结通过这次实验,我们了解了串的基本概念和应用,学会了串的存储结构和基本操作。
串在计算机中具有广泛的应用,特别是在文本处理和字符串匹配等领域。
掌握了串的相关知识,对我们进一步深入理解计算机原理和算法有着重要的意义。
串的基本操作和简程序实验心得
串的基本操作包括:1. 创建串:使用字符串常量或字符数组来创建一个串。
2. 初始化串:将串中的所有元素设置为一个特定的值。
3. 拷贝串:将一个串的内容复制到另一个串中。
4. 连接串:将两个或多个串连接在一起,形成一个新的串。
5. 求串长度:返回串中元素的个数。
6. 判断子串:检查一个串是否包含在另一个串中。
7. 查找子串:在一个串中查找指定子串的位置。
8. 替换子串:将一个串中的某个子串替换为另一个子串。
9. 插入子串:在指定位置插入一个子串。
10. 删除子串:从指定位置开始,删除指定长度的子串。
11. 截取子串:从指定位置开始,截取指定长度的子串。
12. 逆置串:将串中的元素顺序颠倒。
13. 遍历串:访问串中的每个元素。
以下是一个简单的C语言程序,用于实现上述操作:```c#include <stdio.h>#include <string.h>#include <stdlib.h>void create_string(char *str, const char *s);void init_string(char *str, char c);void copy_string(char *dest, const char *src);void concatenate_strings(char *dest, const char *s1, const char *s2); int length_string(const char *str);int substring_exists(const char *str, const char *sub);int find_substring(const char *str, const char *sub);void replace_substring(char *str, const char *old, const char *new); void insert_substring(char *str, int pos, const char *sub);void delete_substring(char *str, int pos, int len);void substring(char *dest, const char *str, int pos, int len);void reverse_string(char *str);void traverse_string(const char *str);int main() {char str1[100], str2[100], result[200];int pos = 2;int len = 3;int found = -1;int index = -1;const char *old = "world";const char *new = "everyone";const char *sub = "hello";const char *s1 = "Hello, ";const char *s2 = "world!";create_string(str1, "Hello");create_string(str2, "world");init_string(result, '-');concatenate_strings(result, s1, s2);printf("Concatenated string: %s", result);printf("Length of string: %d", length_string(result));found = substring_exists(result, sub);printf("Substring exists: %d", found);index = find_substring(result, sub);printf("Substring index: %d", index);replace_substring(result, old, new);printf("Replaced string: %s", result);insert_substring(result, pos, sub);printf("Inserted string: %s", result);delete_substring(result, pos, len);printf("Deleted string: %s", result);substring(result, result + index + strlen(sub), pos, len);printf("Substring after deletion: %s", result);reverse_string(result);printf("Reversed string: %s", result);traverse_string(result);return 0;}```实验心得:通过这个简单的程序,我了解了串的基本操作和实现方法。
串及其应用的实验报告
一、实验目的1. 理解串的概念及其基本操作。
2. 掌握串的创建、插入、删除、查找等操作。
3. 学习串在具体应用场景中的应用。
二、实验原理串(String)是一种特殊的线性表,它是由若干字符构成的有限序列。
串的基本操作包括创建、插入、删除、查找等。
在计算机科学中,串广泛应用于文本处理、字符串匹配、自然语言处理等领域。
三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019四、实验内容1. 串的创建2. 串的插入3. 串的删除4. 串的查找5. 串在文本处理中的应用五、实验步骤1. 串的创建(1)定义串的结构体```cppstruct String {char data; // 指向串中字符的指针int length; // 串的长度};```(2)创建串```cppString createString(const char str) {String s;s.data = new char[strlen(str) + 1]; // 为串分配内存strcpy(s.data, str); // 复制字符串到串中s.length = strlen(str); // 设置串的长度return s;}```2. 串的插入(1)在串的指定位置插入字符```cppvoid insertChar(String& s, int position, char ch) {if (position < 0 || position > s.length) {return; // 插入位置不合法}char newData = new char[s.length + 2]; // 为新串分配内存 strcpy(newData, s.data); // 复制原串到新串newData[position] = ch; // 在指定位置插入字符strcpy(s.data, newData); // 复制新串到原串s.length++; // 更新串的长度}```(2)在串的指定位置插入子串```cppvoid insertSubstring(String& s, int position, const char subStr) {if (position < 0 || position > s.length) {return; // 插入位置不合法}char newData = new char[s.length + strlen(subStr) + 1]; // 为新串分配内存strcpy(newData, s.data); // 复制原串到新串strcpy(newData + position, subStr); // 在指定位置插入子串strcpy(s.data, newData); // 复制新串到原串s.length += strlen(subStr); // 更新串的长度}```3. 串的删除(1)删除串中的单个字符```cppvoid deleteChar(String& s, int position) {if (position < 0 || position >= s.length) {return; // 删除位置不合法}char newData = new char[s.length]; // 为新串分配内存strcpy(newData, s.data); // 复制原串到新串strcpy(newData + position, newData + position + 1); // 删除指定位置的字符strcpy(s.data, newData); // 复制新串到原串s.length--; // 更新串的长度}```(2)删除串中的子串```cppvoid deleteSubstring(String& s, const char subStr) {int position = s.indexOf(subStr); // 查找子串的位置if (position == -1) {return; // 子串不存在}deleteChar(s, position); // 删除子串}```4. 串的查找(1)查找串中的单个字符```cppint indexOfChar(const String& s, char ch) {for (int i = 0; i < s.length; i++) {if (s.data[i] == ch) {return i; // 找到字符,返回位置}}return -1; // 未找到字符,返回-1}```(2)查找串中的子串```cppint indexOfSubstring(const String& s, const char subStr) {for (int i = 0; i <= s.length - strlen(subStr); i++) {if (strncmp(s.data + i, subStr, strlen(subStr)) == 0) {return i; // 找到子串,返回位置}}return -1; // 未找到子串,返回-1}```5. 串在文本处理中的应用(1)字符串替换```cppvoid replaceSubstring(String& s, const char oldStr, const char newStr) { int position = indexOfSubstring(s, oldStr);while (position != -1) {deleteSubstring(s, oldStr); // 删除旧子串insertSubstring(s, position, newStr); // 插入新子串position = indexOfSubstring(s, oldStr); // 继续查找旧子串}}```(2)字符串排序```cppvoid sortString(String& s) {char temp = new char[s.length + 1];strcpy(temp, s.data);qsort(temp, s.length, sizeof(char), [](const void a, const void b) { return (const char)a - (const char)b;});strcpy(s.data, temp);delete[] temp;}```六、实验结果与分析1. 创建串:通过创建一个包含“Hello, World!”的串,验证了串的创建功能。
串及其应用的实验报告
串及其应用的实验报告串及其应用的实验报告引言:串是计算机科学中一种基本的数据结构,它由一系列字符组成,可以是字母、数字或其他符号。
在计算机编程中,串常常用于存储和处理文本信息。
本实验旨在通过实践操作,探索串的基本特性和应用。
实验一:串的创建和操作1. 实验目的通过编写程序,学习串的创建和操作方法。
2. 实验步骤(1)使用编程语言创建一个空串。
(2)向串中添加字符,观察串的变化。
(3)使用串的长度函数,计算串的长度。
(4)使用串的比较函数,比较两个串的大小。
(5)使用串的连接函数,将两个串连接起来。
(6)使用串的截取函数,截取指定位置和长度的子串。
3. 实验结果通过实验步骤的操作,我们成功创建了一个空串,并向其中添加了字符。
使用长度函数计算出了串的长度,并使用比较函数比较了两个串的大小。
通过连接函数,我们将两个串连接成了一个新的串。
最后,使用截取函数,我们截取了指定位置和长度的子串。
实验二:串的模式匹配1. 实验目的通过实验操作,了解串的模式匹配算法。
2. 实验步骤(1)使用编程语言实现串的模式匹配算法。
(2)创建一个主串和一个模式串。
(3)使用模式匹配算法,在主串中查找模式串的位置。
3. 实验结果通过实验步骤的操作,我们成功实现了串的模式匹配算法。
创建了一个主串和一个模式串,并使用算法在主串中找到了模式串的位置。
实验三:串的应用——文本编辑器1. 实验目的通过实验操作,熟悉串的应用——文本编辑器。
2. 实验步骤(1)使用编程语言实现一个简单的文本编辑器。
(2)实现文本插入、删除和替换功能。
(3)实现文本搜索和替换功能。
3. 实验结果通过实验步骤的操作,我们成功实现了一个简单的文本编辑器。
可以插入、删除和替换文本,还可以进行文本搜索和替换。
结论:通过本次实验,我们对串及其应用有了更深入的了解。
串作为计算机科学中常用的数据结构,具有广泛的应用领域。
通过实践操作,我们掌握了串的创建和操作方法,并学会了串的模式匹配和文本编辑器的应用。
微型计算机实验一实验报告
微型计算机实验一实验报告实验一:微型计算机的基本操作及应用探究一、实验目的1.了解微型计算机的基本组成和工作原理;2.学习使用微型计算机进行基本操作;3.探究微型计算机在实际应用中的作用。
二、实验器材和仪器1.微型计算机实验箱;2.微型计算机主机;3.显示器;4.键盘。
三、实验内容1.将微型计算机主机与显示器、键盘连接;2.打开微型计算机并进行基本操作;3.使用微型计算机进行基本应用。
四、实验步骤1.将微型计算机主机与显示器、键盘连接,确保连接稳固;2.打开微型计算机主机,等待系统启动完毕;3.使用键盘进行基本操作,包括输入字符、回车等;4.运行预装的基本应用软件,并进行相应操作。
五、实验结果和分析在本次实验中,通过连接主机与显示器、键盘,我们成功打开了微型计算机并进行了基本操作。
使用键盘输入字符并通过回车键确认后,我们可以在显示器上看到相应的结果。
这表明微型计算机能够正确地接收和处理我们输入的指令,并将结果显示出来。
通过运行预装的基本应用软件,我们还可以进行更加复杂的操作,如文字处理、图形绘制等。
本次实验中,我们还了解到微型计算机的基本组成和工作原理。
微型计算机由主机、显示器、键盘组成。
在主机中,CPU是主要的控制中心,负责接收和处理指令;内存存储了计算机运行时所需的数据和程序;硬盘则保存了大容量的数据。
显示器负责将计算机处理的结果显示出来,键盘则用于输入指令和数据。
微型计算机的应用领域十分广泛。
它可以用于文字处理、数据处理、图形绘制等多个方面。
在今天的社会中,无论是企事业单位还是个人用户,几乎都需要使用微型计算机进行日常工作和生活。
微型计算机的快速计算和大容量存储能力,使得数据处理和信息管理变得更加便捷和高效。
六、实验总结通过本次实验,我们学习了微型计算机的基本操作和应用,并了解了微型计算机的基本组成和工作原理。
微型计算机在今天的社会中扮演着重要的角色,其广泛的应用范围使得人们的工作和生活更加便捷和高效。
微型计算机原理实验
实验一汇编程序的上机调试操作【实验目的】1. 熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程;2. 掌握DEBUG 的基本命令及其功能【实验仪器】PC机【实验内容】上机过程与DEBUG的使用DEBUG是DOS提供的用于程序调试的系统,作为DOS的外部命令随DOS的其它外部命令一起由DOS的提供产商向用户提供。
因此用户在使用DEBUG系统时一定要注意当前用户所使用的DOS 的外部命令中是否提供该命令(若DOS命令不全,有可能没有此命令)。
由于DEBUG是DOS的外部命令,因此必须在DOS的提示符状态下进行调用。
调用的方法如下:C:\>DEBUG [FILENAME]此处FILENAME应是文件的全名,即应包括文件的主名和扩展名(若文件有扩展名),如文件不在当前目录,则还因包括文件所存放的目录名。
但文件名也可以省略,此时表示(暂时)不调用任何文件。
注意:DEBUG调试程序只能调用当前目录的文件。
DEBUG的调试命令汇编命令A(Assemble)格式:A[address]说明:address 是要进行汇编程序(编码)输入的首地址,可省略。
反汇编命令U(Unassemble)格式:U[address] 或U[range]说明:address 是要反汇编的指令存储单元的首地址,range是要反汇编指令的存储单元的首地址和末地址,均可省略。
显示存储单元命令D(Dump)格式:D[address] 或D[range]说明:address 是要显示的存储单元的首地址,range是要显示的存储单元的首地址和末地址,均可省略。
输入命令E(Enter)输入命令E有两种格式。
格式一、E address [list]格式二、E address说明:list 是表示要输入的数据表,以字节为单位。
寄存器内容检查和修改命令R(Register)寄存器内容检查和修改命令R有两种格式。
格式一(寄存器内容检查命令)、R格式二(寄存器内容修改命令)、R registername说明:registername 是要修改的寄存器名,必须是一个十六位寄存器,如:跟踪命令T(Trace)跟踪命令T有两种格式。
串操作实验报告
串操作实验报告串操作实验报告引言:串操作是计算机科学中的一项基本操作,它涉及到对字符串的处理和操作。
在本次实验中,我们将学习和掌握一些常见的串操作技术,并通过实际操作加深对这些技术的理解和应用。
实验目的:1. 掌握字符串的基本概念和表示方法;2. 学习串的初始化、赋值和销毁操作;3. 熟悉串的基本操作,如求串的长度、比较串、连接串等;4. 掌握串的模式匹配算法。
实验过程:1. 字符串的初始化和赋值在本次实验中,我们使用C语言来进行串操作的实现。
首先,我们需要初始化一个字符串,并为其分配内存空间。
然后,我们可以通过赋值操作将一个字符串赋给另一个字符串。
这样,我们就可以对这个字符串进行各种操作。
2. 求串的长度求串的长度是串操作中的一个基本操作。
我们可以通过遍历字符串中的每一个字符,并计数来得到字符串的长度。
在实际操作中,我们可以使用strlen()函数来实现这个功能。
3. 比较串比较串是判断两个字符串是否相等的操作。
我们可以逐个字符地比较两个字符串中的字符,如果所有字符都相等,则认为两个字符串相等。
在实际操作中,我们可以使用strcmp()函数来实现这个功能。
4. 连接串连接串是将两个字符串连接成一个新的字符串的操作。
我们可以先计算出新字符串的长度,然后将两个字符串中的字符逐个复制到新的字符串中。
在实际操作中,我们可以使用strcat()函数来实现这个功能。
5. 串的模式匹配串的模式匹配是在一个字符串中查找另一个字符串的操作。
我们可以通过遍历字符串中的每一个字符,并与目标字符串进行比较来实现这个功能。
在实际操作中,我们可以使用strstr()函数来实现这个功能。
实验结果:通过实验,我们成功地完成了串操作的各项任务。
我们学会了如何初始化和赋值字符串,如何求串的长度,如何比较和连接串,以及如何进行串的模式匹配。
这些技术对于我们在日后的编程工作中处理字符串将会非常有帮助。
结论:串操作是计算机科学中的一项基本操作,它对于我们处理字符串非常重要。
串的实验报告
实验名称:串的实验实验日期:2021年X月X日实验地点:XX实验室实验目的:1. 理解串的基本概念和性质。
2. 掌握串的运算方法。
3. 熟悉串的存储结构和实现方式。
实验原理:串(String)是一种特殊的线性表,它是由若干个字符组成的有限序列。
串的运算包括连接、求子串、求长度、判断子串等。
实验步骤:1. 初始化一个串s1,并为其赋值“Hello”。
2. 初始化一个串s2,并为其赋值“World”。
3. 将s1和s2连接,得到一个新的串s3。
4. 从s3中提取子串,得到子串s4。
5. 求s3的长度。
6. 判断s4是否为s3的子串。
实验代码:```python# 定义串的类class String:def __init__(self, data):self.data = data# 连接两个串def concatenate(self, other):return String(self.data + other.data) # 提取子串def substring(self, start, end):return String(self.data[start:end]) # 求长度def length(self):return len(self.data)# 判断子串def is_substring(self, other):return other.data in self.data# 初始化两个串s1 = String("Hello")s2 = String("World")# 连接两个串s3 = s1.concatenate(s2)# 提取子串s4 = s3.substring(0, 5)# 求长度length = s3.length()# 判断子串is_sub = s4.is_substring(s3)# 输出结果print("s1:", s1.data)print("s2:", s2.data)print("s3:", s3.data)print("s4:", s4.data)print("s3的长度:", length)print("s4是否为s3的子串:", is_sub)```实验结果:1. s1: Hello2. s2: World3. s3: HelloWorld4. s4: Hell5. s3的长度: 106. s4是否为s3的子串: True实验分析:1. 通过实验,我们成功实现了串的连接、提取子串、求长度和判断子串等基本运算。
微型计算机原理及应用实验报告
机电工程学院
微型计算机原理及应用实验报告
实验一:数据查找实验
实验二:工业顺序控制模拟实验
实验三:交通灯控制模拟实验
实验四:模数转换实验
班级:
学号:
姓名:
撰写日期:
实验一数据查找实验
实验日期:指导老师:成绩:一、实验目的
二、实验内容
三、实验程序框图和主程序
四、实验步骤
五、思考
欲统计片外RAM 8100H ~ 811FH中05H的数目,如何修改实验程序?
实验二工业顺序控制模拟实验
实验日期:指导老师:成绩:一、实验目的
二、实验内容
三、实验程序框图
六、思考
欲使每道工序有多位输出,如何修改实验程序?
实验三交通灯控制模拟实验
实验日期:指导老师:成绩:一、实验目的
二、实验设备
三、实验内容
四、实验要求
1. 画出状态转换图
2. 画出实验接线图
3.
4. 设计延时方案
5. 设计中断服务子程序
6. 设计控制程序
写出每条基本指令的地址、目标代码和源程序代码
五、实验步骤
六、实验总结
实验四模数转换实验
实验日期:指导老师:成绩:一、实验目的
二、实验内容
三、实验程序框图和程序
四、实验接线图
五、实验步骤与记录。
串的操作实验报告
一、实验目的1. 理解串的概念及其在程序设计中的应用。
2. 掌握串的基本操作,如创建、插入、删除、查找等。
3. 提高对数据结构操作的理解和编程能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019三、实验内容1. 创建串2. 插入字符3. 删除字符4. 查找字符5. 合并串6. 判断串是否为空7. 获取串的长度8. 反转串四、实验步骤1. 创建串```cpp#include <iostream>#include <string>using namespace std;int main() {string str1 = "Hello";string str2 = "World";return 0;}```2. 插入字符```cppint main() {string str = "Hello";int position = 3;char ch = 'W';str.insert(position, 1, ch);cout << str << endl; // 输出:HWeHllo return 0;}```3. 删除字符```cppint main() {string str = "Hello";int position = 2;int length = 2;str.erase(position, length);cout << str << endl; // 输出:Hereturn 0;}```4. 查找字符```cppint main() {string str = "Hello";char ch = 'e';size_t position = str.find(ch);cout << position << endl; // 输出:1return 0;}```5. 合并串```cppint main() {string str1 = "Hello";string str2 = "World";string str3 = str1 + str2;cout << str3 << endl; // 输出:HelloWorld return 0;}```6. 判断串是否为空```cppint main() {string str1 = "Hello";string str2 = "";if (str1.empty()) {cout << "str1 is empty" << endl;} else {cout << "str1 is not empty" << endl; }if (str2.empty()) {cout << "str2 is empty" << endl;} else {cout << "str2 is not empty" << endl; }return 0;}```7. 获取串的长度```cppint main() {string str = "Hello";int length = str.length();cout << length << endl; // 输出:5return 0;}```8. 反转串```cppint main() {string str = "Hello";reverse(str.begin(), str.end());cout << str << endl; // 输出:olleHreturn 0;}```五、实验结果与分析通过以上实验,我们成功实现了串的基本操作。
微型计算机原理实验一-串操作
实验三串操作一、实验目的1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
二、实验预习要求1.复习8086指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务1.输入以下程序段并运行之,回答后面的问题。
CLDMOV DI,1000HMOV AX,55AAHMOV CX,10HREP STOSW上述程序段执行后:(1)从DS:1000H开始的16个字单元的内容是什么?55AAH(2) (DI)= 1020H(CX)= 0000H,并解释其原因。
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序段执行后:(1) 从DS:2000H开始的16个字单元的内容是什么?55AAH(2) (SI)= 1020H,(DI)= 2020H,(CX)= 0000H,并分析之。
3.在以上两题的基础上,再输入以下三个程序段并依次运行之。
程序段1:MOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段1执行后:(1) ZF=1 根据ZF的状态,你认为两个串是否比较完了?(2)(SI)= 1020H,(DI)= 2020H,(CX)=0000H,并分析之。
程序段2:MOV [2008H],4455HMOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段2执行后:(1) ZF=0 根据ZF的状态,你认为两个串是否比较完了?(2)(SI)= 100AH,(DI)=200AH,(CX)= 000BH,并分析之。
程序段3:MOV AX,4455HMOV DI,2000HMOV CX,10HREPNZ SCASW程序段3执行后:(1) ZF=?根据ZF的状态,你认为在串中是否找到了数据4455H?(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。
微机原理——串
1、编写一程序,查找TELEPHONE中的电话号码(10位)有无“-”符,如果有则转向FOUND_DASH,若无,转向NO_DASH,使用SCASB指令LEA DI , TELEPHONEMOV AL , ‘-’CLDMOV CX , 10REPNZ SCASBJZ FOUND_DASHJMP NO_DASH2、编写一段程序,用空格将字符区CHAR_FIELD中字符全部清除,字符数存放在COUNT 单元中MOV AL , ‘’LEA DI , CHAR_FIELDCLDMOV CX , COUNTREP STOSB3、编写一段程序,比较2个5字符的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行LEA SI , NEWSLEA DI , OLDSMOV CX , 5CLDREP CMPSBJNZ NEW_LESS4、编写一段程序,将字符串STRING中的‘&’字符用空格代替‘The date is FEB&03’LEA SI , STRINGMOV CX , CNAGAIN:MOV AL , [DI]CMP AL , ‘&’JNZ NEXTMOV [DI] , ‘’NEXT:INC DILOOP AGAIN5、假定程序中数据段定义如下:STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)PRINT_LINE DB 50 DUP(?)分别编写下面功能程序段①用空格符清除PRINT_LINE字符域MOV AL , ‘’MOV CX , 50CLDLEA DI , PRINT_LINEREP STOSB②在STUDENT_ADDR中查找第一个“-”MOV AL , ‘-’MOV CX , 9CLDLEA DI , STUDENT_ADDRREPZ SCASBJNZ NEXTDEC DINEXT:③在STUDENT_ADDR中查找最后一个“-”MOV AL , ‘-’MOV CX , 9STDLEA DI , PRINT_LINEDEC DIREPZ SCASBJNZ NEXTDEC DINEXT:④如果STUDENT_NAME域中全是空格,填入‘*’MOV CX , 30MOV AL , ‘’LEA DI , STUDENT_NAMECLDREPZ SCASBJNZ NEXTMOV AL , ‘*’MOV CX , 30CLDLEA DI , STUDENT_NAMEREP STOSBNEXT:⑤把STUDENT_NAME移到PRINT_LINE中的前30个字节,把STUDENT_ADDR移到PRINT_LINE中的后9个字节LEA DI , PRINT_LINEMOV CX , 30CLDLEA SI , STUDENT_NAMEREP MOVSBLEA SI , PRINT_LINEDEC SILEA DI , PRINT_LINEADD DI , 49STDMOV CX , 9REP MOVSB6、假定数据段定义如下:CONAME DB ‘SPACE EXPLORERS INC.’PRLINE DB 20 DUP(‘’)用串指令编写程序段分别完成以下功能:①从左到右把CONAME中的字符传送到PRLINE中LEA SI , CONAMELEA DI , PRLINECLDMOV CX , PRLINE- CONAMEREP MOVSB②从右到左把CONAME中的字符传送到PRLINE中LEA DI , PRLINESTDMOV CX , PRLINE- CONAMEMOV SI , DIADD DI , CXDEC SIDEC DIREP MOVSB③把CONAME中第3个和第4个字节装入AXMOV AX , WORD PTR CONAME+3④把AX中的内容存入PRLINE+5开始的字节单元中MOV WORD PTR PRLINE +5 ,AX⑤比较CONAME和PRLINE字符串是否相同LEA SI , CONAMELEA DI , PRLINEMOV CX , PRLINE- CONAMECLDREPZ CMPSBJZ MATCH⑥扫描CONAME字符串中有无空格符(SPACE),如有,把第一个空格符的地址传送给BX寄存器LEA DI , CONAMEMOV CX , PRLINE- CONAMECLDMOV AL , ‘’REPZ SCASBJNZ NEXTDEC DIMOV BX , DI NEXT:。
- 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.总结串操作指令的用途及使用方法。