




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文档如对你有帮助,请帮忙下载支持!软件体系结构上机实验报告书中国石油大学(北京)信息学院计算机科学与技术系制 订 人:周新学号: 07指导教师:朱雪峰博士2011年 10月 27日本文档如对你有帮助,请帮忙下载支持!1、课程实验目的通过 KWIC(Key Word in Context )检索系统,对软件体系结构有更加深入的了解和认识。通过运用几种体系结构,熟悉常见的软件体系结构, 并对这几种结构有进一步了解。2、任务概述用管道过滤器,主程序、子程序,抽象数据类型,隐式调用这四种结构来分别实现 KWIC 检索系统。3、实现方法用 C+主要实现了两种结构:主程序、子程序结构,抽象数据类型。(
2、1) KWIC1 工程的入口函数int _tmain(int argc, _TCHAR* argv)/界面,结构选择coutfilename;coutChooseKWICfunctionendl1is MainProgram/SubroutinewithShared Dataendl2 is Abstract Data Typeschoose;if(1=choose)/ 主程序和子程序MainSubroutine mainSub;vectorvector lines=mainSub.readLines(filename);vector lineIndex=mainSub.shiftString
3、(lines);lineIndex=mainSub.firstAlphaSort(lineIndex,lines);本文档如对你有帮助,请帮忙下载支持!mainSub.outPut(lineIndex,lines);else/抽象收据类型Lines *lines=new Lines;Input input;Shift *shift=new Shift;FirstAlphaSort alphaSort;Output output;input.readLines(filename,*lines);shift-circularShift(*lines);alphaSort.alphaSort(*sh
4、ift);output.print(alphaSort);delete shift;delete lines;return 0;( 2)主程序、子程序结构实现类/ 从文件中按行读取vectorvector MainSubroutine:readLines(char* filename)vectorvector dst;ifstream infile(filename,ios:in);if(!infile)本文档如对你有帮助,请帮忙下载支持!coutopen error!endl;exit(0);char temp100=;/存储从文件中读取的行的临时变量/ 按行读取while(infile.g
5、etline(temp,100)int k=0,j=0;vector line;line.swap(vector();char s20=;/存储从行中取字符串的临时变量while(tempk!=0)/ 每个单词的截取条件为下一个字符为空格或者为行的末尾if(tempk+1= |tempk+1=0)&tempk!= )sj=tempk;sj+1=0;string ss=s;line.push_back(ss);j=0;else if(tempk= )j=0;本文档如对你有帮助,请帮忙下载支持!elsesj=tempk;j+;k+;dst.push_back(line);/将从文件中中读出的行加入
6、到dst 中infile.close();for(int i=0;idst.size();i+)for(int j=0;jdst.at(i).size();j+)coutdstij ;coutendl;coutendlendl;return dst;/ 循环左移vectorMainSubroutine:shiftString(vectorvectorsrcLines)vector shiftLines;本文档如对你有帮助,请帮忙下载支持!for(int row=0;rowsrcLines.size();row+)int colnum=srcLinesrow.size();/获取每一行的字符串个
7、数/对第 row 行循环 colnum(字符串个数) 次,生成循环移位后的colnum行for(int col=0;colcolnum;col+)LINE linePos;/声明存放一行的行标以及各列的列表的结构体linePos.rowIndex=row;/给行标赋值/ 循环生成一行的列标for(int colshift=0;colshiftcolnum;colshift+);/取模运算shiftLines.push_back(linePos);return shiftLines;/ 字母排序vectorMainSubroutine:firstAlphaSort(vectorlineIndex
8、,vectorvector srcLines)vectorvector firstChar;vector dstIndex;for(int row=0;rowsrcLines.size();row+)本文档如对你有帮助,请帮忙下载支持!vector firstCharLine;/ 逐行提取各个字符串的首字母for(int col=0;colsrcLinesrow.size();col+)firstCharLine.push_back(srcLinesrowcol0);firstChar.push_back(firstCharLine);/int rowPos=0;int colPos=0;/
9、外面的两层 for 循环是控制循环次数的/ 内部的两层 for 循环是遍历所有的字符串首字母,寻找最小的字母for(int row=0;rowfirstChar.size();row+)for(int col=0;colfirstCharrow.size();col+)char min=z;for(int row=0;rowfirstChar.size();row+)for(int col=0;col=firstCharrowcol&!=firstCharrowcol)rowPos=row;本文档如对你有帮助,请帮忙下载支持!colPos=col;min=firstCharrowcol;fir
10、stCharrowPoscolPos= ;int linePos=0;/在原行矩阵中的位置for(int line=0;linerowPos;line+)linePos+=srcLinesline.size();linePos=linePos+colPos;dstIndex.push_back(lineIndexlinePos);return dstIndex;/ 按照 lineIndex 中的字符串的行标和列标输出所有字符串voidMainSubroutine:outPut(vectorlineIndex,vectorvector srcLines)for(int row=0;rowline
11、Index.size();row+)for(int col=0;collineIndexrow.colIndex.size();col+)本文档如对你有帮助,请帮忙下载支持!coutsrcLineslineIndexrow.rowIndexlineIndexrow.colIndexcol ;coutendl;coutendl;( 3)抽象数据类型结构实现行存储类/ 增加行/ 参数: line 字符串向量列表void Lines:addLine(vector line)lines.push_back(line);/ 从存储结构中获取某一行/ 参数: lineIndex为获取的行的序号,从0 开始
12、/ 返回获取的行vector Lines:getLine(int lineIndex)return lineslineIndex;/ 增加字符串/ 参数:instring为所添加字符串, lineIndex为字符串所在行的序号(从 0 开始)void Lines:addString(string instring, int lineIndex)本文档如对你有帮助,请帮忙下载支持!lineslineIndex.push_back(instring);/ 获取字符串/ 参数: lineIndex为行序号, stringIndex为字符串在行中的序号/ 返回获取的字符串string Lines:ge
13、tString(int lineIndex,int stringIndex)return lineslineIndexstringIndex;/ 增加字符/ 参数: inchar 为增加的字符, stringIndex 为增加的字符所在的字符串的序号,lineIndex为增加的字符所在的行的序号void Lines:addChar(char inchar, int stringIndex, int lineIndex)lineslineIndexstringIndex.push_back(inchar);/ 获取字符/ 参数: lineIndex为行序号, stringIndex为字符串的序号
14、,charIndex为字符的序号/ 返回获取的字符char Lines:getChar(int lineIndex, int stringIndex, int charIndex)return lineslineIndexstringIndexcharIndex;/ 获取总的行数int Lines:getLineNum(void)本文档如对你有帮助,请帮忙下载支持!return lines.size();/ 获取特定行的字符串个数int Lines:getStringNum(int lineIndex)return lineslineIndex.size();输入类void Input:rea
15、dLines(char* filename, Lines &readLines)/ vectorvector dst; ifstream infile(filename,ios:in); if(!infile)coutopen error!endl; exit(0);char temp100=;/ 存储从文件中读取的行的临时变量 int lineIndex=0;/ 行序号/按行读取while(infile.getline(temp,100)int k=0,j=0; vector line;line.swap(vector();本文档如对你有帮助,请帮忙下载支持!readLines.addLin
16、e(line);char s20=;/ 存储从行中取字符串的临时变量int stringIndex=0;/ 字符串序号readLines.addString(s,lineIndex);while(tempk!=0)if(tempk!= )readLines.addChar(tempk,stringIndex,lineIndex);/每个单词的截取条件为下一个字符为空格或者为行的末尾if(tempk= &tempk+1!= )/ readLines.addChar(tempk,stringIndex,lineIndex);/ 将该字符串加入到指定行的指定字符串中/ readLines.addCh
17、ar(0,stringIndex,lineIndex); s0=0;/ 清空字符串readLines.addString(s,lineIndex);stringIndex+;/ 字符串序号加1k+;lineIndex+;/dst.push_back(line);/ 将从文件中中读出的行加入到dst 中infile.close();本文档如对你有帮助,请帮忙下载支持!for(int i=0;ireadLines.getLineNum();i+)for(int j=0;jreadLines.getStringNum(i);j+)coutreadLines.getString(i,j) ;coute
18、ndl;coutendlendl;循环左移类/实现所有行的循环移位void Shift:circularShift(Lines srcLines)int lineIndex=0;for(int row=0;rowsrcLines.getLineNum();row+)int cols=srcLines.getStringNum(row);for(int col=0;colcols;col+)vector newLine;lineShift.addLine(newLine);for(int newcol=0;newcolcols;newcol+)lineShift.addString(srcLin
19、es.getString(row,(col+newcol)%cols),lineIndex);本文档如对你有帮助,请帮忙下载支持!lineIndex+;/获取所有行Lines Shift:getLines(void)return lineShift;/获取某一行vector Shift:getLine(int lineIndex)return lineShift.getLine(lineIndex);/获取某一行中某一位置的字符串string Shift:getString(int lineIndex,int stringIndex)return lineShift.getString(lin
20、eIndex,stringIndex);/获取某一行中某一个字符串中的某一位置的字符char Shift:getChar(int lineIndex, int stringIndex, int charIndex)return lineShift.getChar(lineIndex,stringIndex,charIndex);/获取行数本文档如对你有帮助,请帮忙下载支持!int Shift:getLineNum(void)return lineShift.getLineNum();/获取某一行的字符串个数int Shift:getStringNum(int lineIndex)return
21、lineShift.getStringNum(lineIndex);排序类/实现按首字母排序void FirstAlphaSort:alphaSort(Shift srcShiftLines)shiftLines=srcShiftLines;/ 将传进得Shift 对象赋值给成员变量vector firstChar;for(int row=0;rowshiftLines.getLineNum();row+)firstChar.push_back(shiftLines.getChar(row,0,0);/获取首字母/首字母排序for(int loop=0;loopfirstChar.size()
22、;loop+)char min=z;int rowIndex=0;for(int row=0;row=firstCharrow& !=firstCharrow)min=firstCharrow;rowIndex=row;charSort.push_back(rowIndex);firstCharrowIndex= ;/将找到的最小的字母置为,以便在下一次查找时不再保留/首字母排序vector FirstAlphaSort:getCharSort()return charSort;/获取行数int FirstAlphaSort:getLineNum(void)return shiftLines.getLineNum();/按行的序号,将各字符串合并成一个字符串,然后获取一行/lineIndex 为行序号stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级数学下册教案《确定位置(一)》北师大版
- 《百分数-百分数的认识》教学设计-2024-2025学年六年级上册数学北师大版
- 苏教版三年级上册期中考试数学试卷-(含解析)
- 2025年广西电力职业技术学院单招职业技能测试题库1套
- 2025年贵州电子信息职业技术学院单招职业适应性测试题库审定版
- Unit1 Making friends (教学设计)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024年全息投影项目资金筹措计划书代可行性研究报告
- 2025年广西机电职业技术学院单招职业倾向性测试题库附答案
- 2024年饲用天然有效成分制剂项目资金筹措计划书
- 第二章 有理数及其运算单元教学设计 -2024-2025学年鲁教版(五四制)数学六年级上册
- 绥芬河市2025年上半年招考事业单位专业人员易考易错模拟试题(共500题)试卷后附参考答案
- 小学数学新课程标准(教育部2024年制订)
- 2025年二级建造师聘用合同范文(三篇)
- 湖北省2025届高三T8联盟模拟考数学试卷(解析版)
- 2025年北京电子科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年包头轻工职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年叉车司机车辆基本操作知识考试题库及答案(共70题)
- 工业统计知识培训
- 2025年苏州高铁新城国有资产控股(集团)有限公司招聘笔试参考题库附带答案详解
- 郑州市2025年高中毕业年级第一次质量预测(一模) 化学试卷(含标准答案)
- 2025年临床医师定期考核必考复习题库及答案(1080题)
评论
0/150
提交评论