KWIC实验报告C.docx
《KWIC实验报告C.docx》由会员分享,可在线阅读,更多相关《KWIC实验报告C.docx(11页珍藏版)》请在冰豆网上搜索。
KWIC实验报告C
软件体系结构
上机实验报告书
中国石油大学(北京)信息学院
计算机科学与技术系
制订人:
周新
学号:
07
指导教师:
朱雪峰博士
2011年10月27日
1、课程实验目的
通过KWIC(KeyWordinContext)检索系统,对软件体系结构有更加深入的了解和认识。
通过运用几种体系结构,熟悉常见的软件体系结构,并对这几种结构有进一步了解。
2、任务概述
用管道过滤器,主程序、子程序,抽象数据类型,隐式调用这四种结构来分别实现KWIC检索系统。
3、实现方法
用C++主要实现了两种结构:
主程序、子程序结构,抽象数据类型。
(1)KWIC1工程的入口函数
int_tmain(intargc,_TCHAR*argv[])
{
ize();j++)
{
cout<}
cout<}
cout<returndst;
}
ize();ize();col++)
{
(srcLines[row][col][0]);
}
(firstCharLine);ize();col++)
{
charmin='z';
for(introw=0;row<();row++)
{
for(intcol=0;col{
if(min>=firstChar[row][col]&&''!
=firstChar[row][col])
{
rowPos=row;
colPos=col;
min=firstChar[row][col];
}
}
}
firstChar[rowPos][colPos]='';
intlinePos=0;ize();
}
linePos=linePos+colPos;
(lineIndex[linePos]);
}
}
returndstIndex;
}
;col++)
{
cout<}
cout<}
cout<}
(3)抽象数据类型结构实现
行存储类
ush_back(instring);
}
ush_back(inchar);
}
ize();
}
输入类
voidInput:
:
readLines(char*filename,Lines&readLines)
{
//vector>dst;
ifstreaminfile(filename,ios:
:
in);
if(!
infile)
{
cout<<"openerror!
"<exit(0);
}
chartemp[100]="";//存储从文件中读取的行的临时变量
intlineIndex=0;//行序号
//按行读取
while(temp,100))
{
intk=0,j=0;
vectorline;
(vector());
(line);
chars[20]="";//存储从行中取字符串的临时变量
intstringIndex=0;//字符串序号
(s,lineIndex);
while(temp[k]!
=0)
{
if(temp[k]!
='')
{
(temp[k],stringIndex,lineIndex);
}
//每个单词的截取条件为下一个字符为空格或者为行的末尾
if(temp[k]==''&&temp[k+1]!
='')
{
//(temp[k],stringIndex,lineIndex);//将该字符串加入到指定行的指定字符串中
//('\0',stringIndex,lineIndex);
s[0]='\0';//清空字符串
(s,lineIndex);
stringIndex++;//字符串序号加1
}
k++;
}
lineIndex++;
//(line);//将从文件中中读出的行加入到dst中
}
();
for(inti=0;i<();i++)
{
for(intj=0;j<(i);j++)
{
cout<<(i,j)<<"";
}
cout<}
cout<}
循环左移类
//实现所有行的循环移位
voidShift:
:
circularShift(LinessrcLines)
{
intlineIndex=0;
for(introw=0;row<();row++)
{
intcols=(row);
for(intcol=0;col{
vectornewLine;
(newLine);
for(intnewcol=0;newcol{
(row,(col+newcol)%cols),lineIndex);
}
lineIndex++;
}
}
}
//获取所有行
LinesShift:
:
getLines(void)
{
returnlineShift;
}
//获取某一行
vectorShift:
:
getLine(intlineIndex)
{
return(lineIndex);
}
//获取某一行中某一位置的字符串
stringShift:
:
getString(intlineIndex,intstringIndex)
{
return(lineIndex,stringIndex);
}
//获取某一行中某一个字符串中的某一位置的字符
charShift:
:
getChar(intlineIndex,intstringIndex,intcharIndex)
{
return(lineIndex,stringIndex,charIndex);
}
//获取行数
intShift:
:
getLineNum(void)
{
return();
}
//获取某一行的字符串个数
intShift:
:
getStringNum(intlineIndex)
{
return(lineIndex);
}
排序类
//实现按首字母排序
voidFirstAlphaSort:
:
alphaSort(ShiftsrcShiftLines)
{
shiftLines=srcShiftLines;//将传进得Shift对象赋值给成员变量
vectorfirstChar;
for(introw=0;row<();row++)
{
(row,0,0));//获取首字母
}
//首字母排序
for(intloop=0;loop<();loop++)
{
charmin='z';
introwIndex=0;
for(introw=0;row<();row++)
{
if(min>=firstChar[row]&&''!
=firstChar[row])
{
min=firstChar[row];
rowIndex=row;
}
}
(rowIndex);
firstChar[rowIndex]='';//将找到的最小的字母置为‘’,以便在下一次查找时不再保留
}
}
//首字母排序
vectorFirstAlphaSort:
:
getCharSort()
{
returncharSort;
}
//获取行数
intFirstAlphaSort:
:
getLineNum(void)
{
return();
}
//按行的序号,将各字符串合并成一个字符串,然后获取一行
//lineIndex为行序号
stringFirstAlphaSort:
:
getLineAsString(intlineIndex)
{
stringlineString;
for(intstrCount=0;strCount<(lineIndex);strCount++)
{
lineString+=(lineIndex,strCount)+"";
}
lineString+="\0";
returnlineString;
}
输出类
//按字母表顺序输出
voidOutput:
:
print(FirstAlphaSortsortLines)
{
for(introw=0;row<();row++)
{
cout<<()[row])<}
cout<}
4、实验的例程
(1)主程序、子程序运行结果
(2)抽象收据类型
5、总结
通过本次实验,首先对软件体系结构有了更真切的了解,尤其是对管道过滤器结构,主程序、子程序结构,抽象数据类型结构,隐式调用这四种结构的理解更加透彻了。
同时还对KWIC有个一个认知的过程。
在实现的上述两种结构的过程中,对增强了数据结构的掌握,以及对面向对象概念的进一步理解。
编程时,遇到了各种大大小小的问题,尤其是数据结构定义方面的,深刻体会到了数据结构的重要性,同时发现了自己编写的代码移植性以及编码风格都不是很好,希望老师给予指点。