KWIC实验报告(C++)
更新时间:2023-10-21 22:49:01 阅读量: 综合文库 文档下载
- kwic实验结果分析推荐度:
- 相关推荐
软件体系结构
上机实验报告书
中国石油大学(北京)信息学院
计算机科学与技术系
制 订 人:周新 学 号:2008082207 指导教师:朱雪峰 博士
2011年10月27日
软件体系结构实验报告书 周新:2008082207
1、课程实验目的
通过KWIC(Key Word in Context)检索系统,对软件体系结构有更加深入的了解和认识。通过运用几种体系结构,熟悉常见的软件体系结构,并对这几种结构有进一步了解。
2、任务概述
用管道过滤器,主程序、子程序,抽象数据类型,隐式调用这四种结构来分别实现KWIC检索系统。
3、实现方法
用C++主要实现了两种结构:主程序、子程序结构,抽象数据类型。 (1)KWIC1工程的入口函数
int _tmain(int argc, _TCHAR* argv[]) {
//界面,结构选择
cout<<\char filename[30]; cin>>filename;
cout<<\KWIC function\is Main Program/Subroutine with
Shared Data\
if(1==choose)//主程序和子程序 {
MainSubroutine mainSub; int choose=0; cin>>choose;
2
软件体系结构实验报告书 周新:2008082207
}
}
vector
else//抽象收据类型 { } return 0;
Lines *lines=new Lines; Input input;
Shift *shift=new Shift; FirstAlphaSort alphaSort; Output output;
input.readLines(filename,*lines); shift->circularShift(*lines); alphaSort.alphaSort(*shift); output.print(alphaSort); delete shift; delete lines;
(2)主程序、子程序结构实现类
//从文件中按行读取
vector
3
软件体系结构实验报告书 周新:2008082207
vector
ifstream infile(filename,ios::in); if(!infile) { }
cout<<\exit(0);
char temp[100]=\存储从文件中读取的行的临时变量
//按行读取
while(infile.getline(temp,100)) {
int k=0,j=0; vector
char s[20]=\存储从行中取字符串的临时变量
while(temp[k]!=0) {
//每个单词的截取条件为下一个字符为空格或者为行的末尾 if((temp[k+1]==' '||temp[k+1]==0)&&temp[k]!=' ') {
s[j]=temp[k]; s[j+1]='\\0';
4
软件体系结构实验报告书 周新:2008082207
}
}
string ss=s; line.push_back(ss); j=0;
else if(temp[k]==' ') { } else { }
s[j]=temp[k]; j++; j=0;
k++; }
dst.push_back(line);//将从文件中中读出的行加入到dst中
infile.close();
for(int i=0;i for(int j=0;j cout< cout< 5 软件体系结构实验报告书 周新:2008082207 } } cout< return dst; //循环左移 vector { 行 for(int col=0;col LINE linePos;//声明存放一行的行标以及各列的列表的结构体 linePos.rowIndex=row;//给行标赋值 //循环生成一行的列标 for(int colshift=0;colshift linePos.colIndex.push_back((col+colshift)%colnum);//取 for(int row=0;row int colnum=srcLines[row].size();//获取每一行的字符串个数 //对第row行循环colnum(字符串个数)次,生成循环移位后的colnum vector MainSubroutine::shiftString(vector > 6 软件体系结构实验报告书 周新:2008082207 模运算 } //字母排序 vector MainSubroutine::firstAlphaSort(vector } return shiftLines; } } shiftLines.push_back(linePos); lineIndex,vector { vector for(int row=0;row int rowPos=0; int colPos=0; vector for(int col=0;col firstChar.push_back(firstCharLine);// firstCharLine.push_back(srcLines[row][col][0]); 7 软件体系结构实验报告书 周新:2008082207 //外面的两层for循环是控制循环次数的 //内部的两层for循环是遍历所有的字符串首字母,寻找最小的字母 for(int row=0;row for(int col=0;col char min='z'; for(int row=0;row for(int col=0;col if(min>=firstChar[row][col]&&' '!=firstChar[row][col]) } firstChar[rowPos][colPos]=' '; int linePos=0;//在原行矩阵中的位置 for(int line=0;line linePos+=srcLines[line].size(); } { } rowPos=row; colPos=col; min=firstChar[row][col]; 8 软件体系结构实验报告书 周新:2008082207 } } linePos=linePos+colPos; dstIndex.push_back(lineIndex[linePos]); } //按照lineIndex中的字符串的行标和列标输出所有字符串 void MainSubroutine::outPut(vector lineIndex, return dstIndex; vector { for(int row=0;row for(int col=0;col cout< \ } } cout< } cout< (3)抽象数据类型结构实现 行存储类 9 软件体系结构实验报告书 周新:2008082207 //增加行 //参数:line字符串向量列表 void Lines::addLine(vector //从存储结构中获取某一行 //参数:lineIndex为获取的行的序号,从0开始 //返回获取的行 vector // 增加字符串 //参数:instring为所添加字符串,lineIndex为字符串所在行的序号(从0开始) void Lines::addString(string instring, int lineIndex) { } //获取字符串 //参数:lineIndex为行序号,stringIndex为字符串在行中的序号 //返回获取的字符串 lines[lineIndex].push_back(instring); return lines[lineIndex]; lines.push_back(line); 10 软件体系结构实验报告书 周新:2008082207 string Lines::getString(int lineIndex,int stringIndex) { } //增加字符 //参数:inchar为增加的字符,stringIndex为增加的字符所在的字符串的序号,lineIndex为增加的字符所在的行的序号 void Lines::addChar(char inchar, int stringIndex, int lineIndex) { } //获取字符 //参数:lineIndex为行序号,stringIndex为字符串的序号,charIndex为字符的序号 //返回获取的字符 char Lines::getChar(int lineIndex, int stringIndex, int charIndex) { } //获取总的行数 int Lines::getLineNum(void) { return lines.size(); return lines[lineIndex][stringIndex][charIndex]; lines[lineIndex][stringIndex].push_back(inchar); return lines[lineIndex][stringIndex]; 11 软件体系结构实验报告书 周新:2008082207 } //获取特定行的字符串个数 int Lines::getStringNum(int lineIndex) { } return lines[lineIndex].size(); 输入类 void Input::readLines(char* filename, Lines &readLines) { // char temp[100]=\存储从文件中读取的行的临时变量 int lineIndex=0;//行序号 //按行读取 while(infile.getline(temp,100)) { int k=0,j=0; vector ifstream infile(filename,ios::in); if(!infile) { } cout<<\exit(0); 12 软件体系结构实验报告书 周新:2008082207 vector char s[20]=\存储从行中取字符串的临时变量 int stringIndex=0;//字符串序号 readLines.addString(s,lineIndex); while(temp[k]!=0) { if(temp[k]!=' ') { } //每个单词的截取条件为下一个字符为空格或者为行的末尾 if(temp[k]==' '&&temp[k+1]!=' ') { // readLines.addChar(temp[k],stringIndex,lineIndex);//将该字符串加readLines.addChar(temp[k],stringIndex,lineIndex); 入到指定行的指定字符串中 } // } readLines.addChar('\\0',stringIndex,lineIndex); s[0]='\\0';//清空字符串 readLines.addString(s,lineIndex); stringIndex++;//字符串序号加1 k++; 13 软件体系结构实验报告书 周新:2008082207 } // } lineIndex++; dst.push_back(line);//将从文件中中读出的行加入到dst中 infile.close(); for(int i=0;i cout< for(int j=0;j cout< cout< 循环左移类 //实现所有行的循环移位 void Shift::circularShift(Lines srcLines) { int lineIndex=0; for(int row=0;row int cols=srcLines.getStringNum(row); for(int col=0;col 14 软件体系结构实验报告书 周新:2008082207 { vector for(int newcol=0;newcol lineShift.addString(srcLines.getString(row,(col+newcol)%cols),lineIndex); } //获取所有行 Lines Shift::getLines(void) { } //获取某一行 vector return lineShift.getLine(lineIndex); return lineShift; } } } lineIndex++; 15 软件体系结构实验报告书 周新:2008082207 //获取某一行中某一位置的字符串 string Shift::getString(int lineIndex,int stringIndex) { } //获取某一行中某一个字符串中的某一位置的字符 char Shift::getChar(int lineIndex, int stringIndex, int charIndex) { } //获取行数 int Shift::getLineNum(void) { } //获取某一行的字符串个数 int Shift::getStringNum(int lineIndex) { } return lineShift.getStringNum(lineIndex); return lineShift.getLineNum(); return lineShift.getChar(lineIndex,stringIndex,charIndex); return lineShift.getString(lineIndex,stringIndex); 排序类 16 软件体系结构实验报告书 周新:2008082207 //实现按首字母排序 void FirstAlphaSort::alphaSort(Shift srcShiftLines) { shiftLines=srcShiftLines;//将传进得Shift对象赋值给成员变量 vector for(int row=0;row //首字母排序 for(int loop=0;loop char min='z'; int rowIndex=0; for(int row=0;row charSort.push_back(rowIndex); firstChar[rowIndex]=' ';//将找到的最小的字母置为‘ ’,以便在下一次查 if(min>=firstChar[row]&&' '!=firstChar[row]) { } min=firstChar[row]; rowIndex=row; firstChar.push_back(shiftLines.getChar(row,0,0));//获取首字母 找时不再保留 17 软件体系结构实验报告书 周新:2008082207 } } //首字母排序 vector //获取行数 int FirstAlphaSort::getLineNum(void) { } //按行的序号,将各字符串合并成一个字符串,然后获取一行 //lineIndex为行序号 string FirstAlphaSort::getLineAsString(int lineIndex) { string lineString; for(int strCount=0;strCount lineString+=\return lineString; lineString+=shiftLines.getString(lineIndex,strCount)+\return shiftLines.getLineNum(); return charSort; 18 软件体系结构实验报告书 周新:2008082207 } 输出类 //按字母表顺序输出 void Output::print(FirstAlphaSort sortLines) { for(int row=0;row cout< } cout< } 4、实验的例程 (1)主程序、子程序运行结果 19 软件体系结构实验报告书 周新:2008082207 1选择的实现结构为主程序、子程序 (2)抽象收据类型 20 软件体系结构实验报告书 周新:2008082207 2选择的实现结构为抽象数据类型 5、总结 通过本次实验,首先对软件体系结构有了更真切的了解,尤其是对管道过滤器结构,主程序、子程序结构,抽象数据类型结构,隐式调用这四种结构的理解更加透彻了。同时还对KWIC有个一个认知的过程。 在实现的上述两种结构的过程中,对增强了数据结构的掌握,以及对面向对象概念的进一步理解。编程时,遇到了各种大大小小的问题,尤其是数据结构定义方面的,深刻体会到了数据结构的重要性,同时发现了自己编写的代码移植性以及编码风格都不是很好,希望老师给予指点。 21 软件体系结构实验报告书 周新:2008082207 2选择的实现结构为抽象数据类型 5、总结 通过本次实验,首先对软件体系结构有了更真切的了解,尤其是对管道过滤器结构,主程序、子程序结构,抽象数据类型结构,隐式调用这四种结构的理解更加透彻了。同时还对KWIC有个一个认知的过程。 在实现的上述两种结构的过程中,对增强了数据结构的掌握,以及对面向对象概念的进一步理解。编程时,遇到了各种大大小小的问题,尤其是数据结构定义方面的,深刻体会到了数据结构的重要性,同时发现了自己编写的代码移植性以及编码风格都不是很好,希望老师给予指点。 21
正在阅读:
KWIC实验报告(C++)10-21
和必备知识人教版九年级化学1-8单元知识点- 寒假作业(2)03-24
最后的几天心情日记10-29
小木偶的故事续写600了07-15
毕业设计任务书及说明书(论文)03-16
高三艺术班数学复习专用资料06-08
危险化学品企业贯彻落实《国务院关于进一步加强企业安全生产工作的通知》实施意见安监总管三〔2010〕186号01-23
非语言交际在中西方文化中差异论文11-06
政府在经济功能区转型升级中的作用研究07-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 实验
- 报告
- KWIC
- my favorite traditional Chinese story
- Lesson Plan for Unit 10(上)
- 信息在语文教学中的运用
- 中考压轴题型之 平行四边形的存在性
- 沟通中的情绪管理
- 民营银行发展外文文献翻译最新译文3800多字
- 2018-2019学年高中化学 课时分层作业21 硝酸的性质 苏教版必修1
- C语言习题及解答
- 小学五年级上册数学周练5678
- 齐桓晋文之事导学案
- 2008年度南京市软件企业技术和管理人才奖励名单
- 道路绿化养护施工方案
- 基于FPGA的测试图像采集系统的设计
- 浮法玻璃锡缺陷产生的原因及治理措施(论文)
- 宜兴市教育局文件
- 试论鲁迅作品中的妇女形象
- 本科《人体解剖学》练习题 及答案
- 村计生专干的职责、任务和要求
- 2013-2017江苏高考英语单选
- 江西省民办幼儿园管理办法