版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件体系结构机实验报告中国石油大学(北京)信息学院计算机科学与技术系制 订 人:周新禹口学 号:2008082207指导教师:朱雪峰 博士2011年 10月27日.1、课程实验目的通过KWIC( Key Word in Con text )检索系统,对软件体系结构有更加深入的了解和认识。通过运用几种体系结构, 熟悉常见的软件体系结构,并对这几种结构有进一步了解。2、任务概述用管道过滤器,主程序、子程序,抽象数据类型,隐式调用这四种结构来分 别实现KWIC检索系统。3、实现方法用C+主要实现了两种结构:主程序、子程序结构,抽象数据类型。(1)KWIC1工程的入口函数int _tmai n(int
2、 argc, _TCHAR* argv)界面,结构选择cout<<"I nput a absolute file name:"char file name30;cin> >file name;cout<<"Choose KWIC function"<<endl<<"1is Main Program/Subroutine withShared Data"<<e ndl<<"2 is Abstract Data Ty pes"<&
3、lt;e ndl;int choose=0;cin> >choose;if(1=choose)/主程序和子程序Main Subrout ine main Sub;vectorvvectorvstri ng> > lin es=ma in Sub.readL in es(file name);vector<LINE> lineln dex=ma in Sub.shiftStri ng(l in es);lineln dex=mai nSub.firstAI phaSort(li nel ndex,li nes);main Sub.out Pu t(l inel
4、n dex, lin es);else/抽象收据类型Lines *li nes=new Lines;Input input;Shift *shift=new Shift;FirstAl phaSort alp haSort;Output out put;inpu t.readL in es(file name,*li nes);shift->circularShift(*li nes);alp haSort.al phaSort(*shift);out put.prin t(a Ip haSort);delete shift;delete lines;return 0;(2)主程序、子程
5、序结构实现类/从文件中按行读取 vectorvvectorvstri ng> > Main Subrouti ne:readL in es(char* file name)vectorwectorvstri ng> > dst;ifstream in file(file name,ios:i n);if(!i nfile)cout<< "open error!"<<e ndl;exit(0);char tem p100=""/存储从文件中读取的行的临时变量/按行读取 while(i nfile.getli
6、ne(tem p,100)int k=0,j=0;vector<stri ng> line;lin e.swa p(vector<stn ng>();char s20=""/存储从行中取字符串的临时变量while(te mp k!=0)/每个单词的截取条件为下一个字符为空格或者为行的末尾if(te mp k+1=' '|te mp k+1=0) &&temp k!='')sj=tem pk;sj+1='0'.stri ng ss=s;line.pu sh_back(ss);j=0;els
7、e if(te mp k='')j=0;elsesj=tem pk;j+;k+;dst. pu sh_back(l in e);/将从文件中中读出的行加入到dst中in file.close();for(i nt i=0;i<dst.size();i+)for(i nt j=0;j<dst.at(i).size();j+)cout<<dstij<<""cout<<e ndl;.linePo s.colI ndex .pu sh_back(col+colshift)%col nu m);/取cout<<
8、;e ndl<<e ndl;return dst;/循环左移vector<LINE>Mai nSubrouti ne:shiftStri ng(vector<vector<stri ng>srcL ines)vector<LINE> shiftL ines;for(i nt row=0;row<srcL in es.size();row+)int colnum=srcL in esrow.size();/获取每一行的字符串个数/对第row行循环colnum (字符串个数)次,生成循环移位后的colnumfor(i nt col=0;c
9、ol<co Inu m;col+)LINE li neP os;/ 声明存放一行的行标以及各列的列表的结构体lineP os.rowl ndex=row;/给行标赋值/循环生成一行的列标for(i nt colshift=0;colshift<co Inu m;colshift+).模运算shiftL ines.pu sh_back(l inePo s);retur n shiftL ines;vector<LINE>/字母排序Mai nSubrout in e:firstAl phaSort(vector<LINE>lineln dex,vector<
10、;vector<stri ng> > srcL ines)vector<vector<char> > firstChar;vector<LINE> dst In dex;for(i nt row=0;row<srcL in es.size();row+)vector<char> firstCharL ine;/逐行提取各个字符串的首字母 for(i nt col=0;col<srcL in esrow.size();col+)firstCharL ine.pu sh_back(srcL in esrowcol0);f
11、irstChar. pu sh_back(firstCharL in e);/int row Po s=0;int colPo s=0;./外面的两层for循环是控制循环次数的/内部的两层for循环是遍历所有的字符串首字母,寻找最小的字母 for(i nt row=0;row<firstChar.size();row+)for(i nt col=0;col<firstCharrow.size();col+)char min='z'for(i nt row=0;row<firstChar.size();row+)for(i nt col=0;col<fir
12、stCharrow.size();col+)if(mi n>=firstCharrowcol&&''!=firstCharrowcol)rowP os=row;colPo s=col;min=firstCharrowcol;firstCharrow Po scol Pos=''int lineP os=0;/在原行矩阵中的位置for(i nt li ne=0;l in e<row Pos;li ne+)linePo s+=srcL in esli ne.size();linePo s=li nePo s+co IPos;dsti nd
13、ex .pu sh_back(l ineln dexl ineP os);retur n dstI ndex;/按照lineindex中的字符串的行标和列标输出所有字符串voidMai nSubrouti ne:out Put(vector<LINE>lineln dex,vector<vector<stri ng> > srcL ines)for(i nt row=0;row<li nel ndex.size();row+)for(i nt col=0;col<li neln dexrow.coll ndex.size();col+)cout&
14、lt;<srcL in esl ineln dexrow.row In dexli neln dexrow.coll ndexcol<<H H.cout<<e ndl;cout<<e ndl;(3)抽象数据类型结构实现行存储类/增加行/参数:line字符串向量列表 void Lin es:addL in e(vector<stn ng> line)lines.p ush_back(l in e);/从存储结构中获取某一行/参数:linelndex 为获取的行的序号,从0开始/返回获取的行vector<stri ng> Lin e
15、s:getL in e(i nt lineln dex)retur n lin esl ineln dex;/增加字符串/参数:instring为所添加字符串,linelndex 为字符串所在行的序号(从0开始)void Lin es:addStri ng(stn ng in stri ng, in t li neln dex)lin esli neln dex. push_back(i nstri ng);/获取字符串/参数:lin el ndex 为行序号,stringin dex为字符串在行中的序号号,/返回获取的字符串.stri ng Lin es:getStn ng(i nt lin
16、eln dex,i nt stri ngin dex)retur n lin esl ineln dexstri ngIn dex;/增加字符/参数:in char为增加的字符,stringin dex为增加的字符所在的字符串的序号,lineln dex为增加的字符所在的行的序号void Lin es:addChar(char in char, i nt stri ngin dex, int lineln dex)lin esli neln dexstri ngin dex. pu sh_back(i nchar);/获取字符/参数:linelndex 为行序号,stringindex为字符串
17、的序号,charlndex为字符的序号/返回获取的字符char Lin es:getChar(i nt lineln dex, int stri ngin dex, int charl ndex)return lin esl ineln dexstri ngin dexcharl ndex;/获取总的行数int Lin es:getL in eNum(void)retur n lin es.size();./获取特定行的字符串个数 int Lin es:getStri ngNum(i nt lineln dex)return lin esli nel ndex.size();输入类void I
18、npu t:readL in es(char* file name. Lines &readL ines)/vector<vector<stri ng> > dst;ifstream in file(file name,ios:i n);if(!i nfile)cout<< "open error!"<<e ndl;exit(0);char temp100=""/存储从文件中读取的行的临时变量int linelndex=0;/ 行序号按行读取while(i nfile.getli ne(tem p,
19、100)int k=0,j=0;.vectorvstri ng> line;lin e.swa p(vector<stn ng>();readL in es.addL in e(l in e);char s20=""/存储从行中取字符串的临时变量 int stringlndex=0;/ 字符串序号readL in es.addStri ng(s, lineln dex);while(te mp k!=0)if(tem p k!='')readL in es.addChar(te mp k,stri ngin dex, lineln dex)
20、;每个单词的截取条件为下一个字符为空格或者为行的末尾if(te mp k=' '&&tem p k+1!='')/readLi nes.addChar(te mp k,stri ngI ndex,li nel ndex);/ 将该字符串加入到指定行的指定字符串中/readL in es.addChar('0',stri ngIn dex, lineln dex);s0='0'/清空字符串 readL in es.addStri ng(s, lineln dex);stringindex+;/字符串序号加 1k+;.
21、lineln dex+;IIdst.push_back(line);/将从文件中中读出的行加入到dst中in file.closeO;for(i nt i=O;i<readL in es.getL in eNum();i+)for(i nt j=O;j<readL in es.getStri ngNum(i);j+)cout<<readL in es.getStri ng(i,j)<<""cout<<e ndl;cout<<e ndl<<e ndl;循环左移类/实现所有行的循环移位 void Shift
22、:circularShift(L ines srcL ines)int lineln dex=0;for(i nt row=0;row<srcL in es.getL in eNum();row+)int cols=srcLi nes.getStri ngNum(row);for(i nt col=0;col<cols;col+).vectorvstri ng> n ewL ine;lin eShift.addLi ne(n ewL in e);for(i nt n ewcol=0;n ewcol<cols ;n ewcol+)lin eShift.addStri ng
23、(srcL in es.getStri ng(row,(col+newcol)%cols),li neln dex);lineln dex+;获取所有行Lines Shift:getL in es(void)return lin eShift;获取某一行vectorvstri ng> Shift:getL in e(i nt lineln dex)return lin eShift.getL in e(li neln dex);.获取某一行中某一位置的字符串stri ng ShifLgetStri ng(i nt li neln dex,i nt stri ngin dex)return
24、 lin eShift.getStri ng(li nel ndexstri ngl ndex);获取某一行中某一个字符串中的某一位置的字符char Shift:getChar(i nt li neln dex, int stri ngIn dex, int charl ndex)return lin eShift.getChar(li nel ndexstri ngl ndex,charl ndex);获取行数int Shift:getL in eNum(void)return lin eShift.getLi neNum();获取某一行的字符串个数int Shift:getStri ngN
25、um(i nt lin el ndex)return lin eShift.getStri ngNum(li nel ndex);排序类/实现按首字母排序 void FirstAI phaSort:al phaSort(Shift srcShiftLi nes)shiftLines=srcShiftLines;/将传进得Shift对象赋值给成员变量vector<char> firstChar;for(i nt row=0;row<shiftL in es.getL in eNum();row+)firstChar.push_back(shiftLines.getChar(ro
26、w,0,0);/ 获取首字母首字母排序for(i nt loop=0;lo op< firstChar.size();lo op+)char min='z'int row In dex=0;for(i nt row=0;row<firstChar.size();row+)if(mi n>=firstCharrow&&' '!=firstCharrow)min=firstCharrow;rowI ndex=row;charS ort.pu sh_back(row In dex);firstCharrowlndex- '/将找到的最小的字母置为,以便在下一次查找时不再保留/首字母排序 vectorvint> FirstAlphaSort:getCharSort()retur n charSort;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026版)护士法律法规试卷及答案
- 建筑行业施工安全检查操作指南
- 质量检验员缺陷识别率绩效衡量表
- 产品运营专员业务效果绩效考核表
- 化工安全操作员绩效考核指标表
- 2026湖南怀化市脑科医院急聘急诊医学科科主任1人考试备考试题及答案解析
- 2026西安外国语大学校医院招聘(3人)考试模拟试题及答案解析
- 售后服务优化策略实施通知6篇范文
- 2026同济大学科技中学秋季招聘教师笔试备考试题及答案解析
- 招聘1-2人!河南蒙古族自治县优干宁镇卫生院诚聘药学工作人员笔试备考题库及答案解析
- 个案护理文章书写
- 2026年校招:上海东方枢纽投资建设发展集团面试题及答案
- 提高冠脉介入手术术前准备合格率 QCC成果汇报
- 第7课 《培养德智体美劳全面发展的社会主义建设者和接班人》课件 2026-2027学年统编版语文九年级上册
- 代账会计 合同8篇
- 2026年国家能源集团企业文化考试题及答案
- 2026年河南林业职业学院高职单招笔试职业技能测验试题库含答案解析2套试卷
- 2026中国睡眠健康研究白皮书(官方完整版中国睡眠研究会×华为运动健康)
- 2026年内蒙古储能电站可行性研究报告
- 沟通客户需求知识培训讲座
- 本科毕业论文撰写讲座课件
评论
0/150
提交评论