KWIC實(shí)驗(yàn)報(bào)告(C).doc_第1頁(yè)
KWIC實(shí)驗(yàn)報(bào)告(C).doc_第2頁(yè)
KWIC實(shí)驗(yàn)報(bào)告(C).doc_第3頁(yè)
KWIC實(shí)驗(yàn)報(bào)告(C).doc_第4頁(yè)
KWIC實(shí)驗(yàn)報(bào)告(C).doc_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!軟件體系結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告書中國(guó)石油大學(xué)(北京)信息學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系制 訂 人:周新學(xué)號(hào): 07指導(dǎo)教師:朱雪峰博士2011年 10月 27日本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!1、課程實(shí)驗(yàn)?zāi)康耐ㄟ^(guò) KWIC(Key Word in Context )檢索系統(tǒng),對(duì)軟件體系結(jié)構(gòu)有更加深入的了解和認(rèn)識(shí)。通過(guò)運(yùn)用幾種體系結(jié)構(gòu),熟悉常見(jiàn)的軟件體系結(jié)構(gòu), 并對(duì)這幾種結(jié)構(gòu)有進(jìn)一步了解。2、任務(wù)概述用管道過(guò)濾器,主程序、子程序,抽象數(shù)據(jù)類型,隱式調(diào)用這四種結(jié)構(gòu)來(lái)分別實(shí)現(xiàn) KWIC 檢索系統(tǒng)。3、實(shí)現(xiàn)方法用 C+主要實(shí)現(xiàn)了兩種結(jié)構(gòu):主程序、子程序結(jié)構(gòu),抽象數(shù)據(jù)類型。(

2、1) KWIC1 工程的入口函數(shù)int _tmain(int argc, _TCHAR* argv)/界面,結(jié)構(gòu)選擇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);本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!mainSub.outPut(lineIndex,lines);else/抽象收據(jù)類型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)主程序、子程序結(jié)構(gòu)實(shí)現(xiàn)類/ 從文件中按行讀取vectorvector MainSubroutine:readLines(char* filename)vectorvector dst;ifstream infile(filename,ios:in);if(!infile)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!coutopen error!endl;exit(0);char temp100=;/存儲(chǔ)從文件中讀取的行的臨時(shí)變量/ 按行讀取while(infile.g

5、etline(temp,100)int k=0,j=0;vector line;line.swap(vector();char s20=;/存儲(chǔ)從行中取字符串的臨時(shí)變量while(tempk!=0)/ 每個(gè)單詞的截取條件為下一個(gè)字符為空格或者為行的末尾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;本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!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;/ 循環(huán)左移vectorMainSubroutine:shiftString(vectorvectorsrcLines)vector shiftLines;本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!for(int row=0;rowsrcLines.size();row+)int colnum=srcLinesrow.size();/獲取每一行的字符串個(gè)

7、數(shù)/對(duì)第 row 行循環(huán) colnum(字符串個(gè)數(shù)) 次,生成循環(huán)移位后的colnum行for(int col=0;colcolnum;col+)LINE linePos;/聲明存放一行的行標(biāo)以及各列的列表的結(jié)構(gòu)體linePos.rowIndex=row;/給行標(biāo)賦值/ 循環(huán)生成一行的列標(biāo)for(int colshift=0;colshiftcolnum;colshift+);/取模運(yùn)算shiftLines.push_back(linePos);return shiftLines;/ 字母排序vectorMainSubroutine:firstAlphaSort(vectorlineIndex

8、,vectorvector srcLines)vectorvector firstChar;vector dstIndex;for(int row=0;rowsrcLines.size();row+)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!vector firstCharLine;/ 逐行提取各個(gè)字符串的首字母for(int col=0;colsrcLinesrow.size();col+)firstCharLine.push_back(srcLinesrowcol0);firstChar.push_back(firstCharLine);/int rowPos=0;int colPos=0;/

9、外面的兩層 for 循環(huán)是控制循環(huán)次數(shù)的/ 內(nèi)部的兩層 for 循環(huán)是遍歷所有的字符串首字母,尋找最小的字母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;本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!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 中的字符串的行標(biāo)和列標(biāo)輸出所有字符串voidMainSubroutine:outPut(vectorlineIndex,vectorvector srcLines)for(int row=0;rowline

11、Index.size();row+)for(int col=0;collineIndexrow.colIndex.size();col+)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!coutsrcLineslineIndexrow.rowIndexlineIndexrow.colIndexcol ;coutendl;coutendl;( 3)抽象數(shù)據(jù)類型結(jié)構(gòu)實(shí)現(xiàn)行存儲(chǔ)類/ 增加行/ 參數(shù): line 字符串向量列表void Lines:addLine(vector line)lines.push_back(line);/ 從存儲(chǔ)結(jié)構(gòu)中獲取某一行/ 參數(shù): lineIndex為獲取的行的序號(hào),從0 開(kāi)始

12、/ 返回獲取的行vector Lines:getLine(int lineIndex)return lineslineIndex;/ 增加字符串/ 參數(shù):instring為所添加字符串, lineIndex為字符串所在行的序號(hào)(從 0 開(kāi)始)void Lines:addString(string instring, int lineIndex)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!lineslineIndex.push_back(instring);/ 獲取字符串/ 參數(shù): lineIndex為行序號(hào), stringIndex為字符串在行中的序號(hào)/ 返回獲取的字符串string Lines:ge

13、tString(int lineIndex,int stringIndex)return lineslineIndexstringIndex;/ 增加字符/ 參數(shù): inchar 為增加的字符, stringIndex 為增加的字符所在的字符串的序號(hào),lineIndex為增加的字符所在的行的序號(hào)void Lines:addChar(char inchar, int stringIndex, int lineIndex)lineslineIndexstringIndex.push_back(inchar);/ 獲取字符/ 參數(shù): lineIndex為行序號(hào), stringIndex為字符串的序號(hào)

14、,charIndex為字符的序號(hào)/ 返回獲取的字符char Lines:getChar(int lineIndex, int stringIndex, int charIndex)return lineslineIndexstringIndexcharIndex;/ 獲取總的行數(shù)int Lines:getLineNum(void)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!return lines.size();/ 獲取特定行的字符串個(gè)數(shù)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=;/ 存儲(chǔ)從文件中讀取的行的臨時(shí)變量 int lineIndex=0;/ 行序號(hào)/按行讀取while(infile.getline(temp,100)int k=0,j=0; vector line;line.swap(vector();本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!readLines.addLin

16、e(line);char s20=;/ 存儲(chǔ)從行中取字符串的臨時(shí)變量int stringIndex=0;/ 字符串序號(hào)readLines.addString(s,lineIndex);while(tempk!=0)if(tempk!= )readLines.addChar(tempk,stringIndex,lineIndex);/每個(gè)單詞的截取條件為下一個(gè)字符為空格或者為行的末尾if(tempk= &tempk+1!= )/ readLines.addChar(tempk,stringIndex,lineIndex);/ 將該字符串加入到指定行的指定字符串中/ readLines.addCh

17、ar(0,stringIndex,lineIndex); s0=0;/ 清空字符串readLines.addString(s,lineIndex);stringIndex+;/ 字符串序號(hào)加1k+;lineIndex+;/dst.push_back(line);/ 將從文件中中讀出的行加入到dst 中infile.close();本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!for(int i=0;ireadLines.getLineNum();i+)for(int j=0;jreadLines.getStringNum(i);j+)coutreadLines.getString(i,j) ;coute

18、ndl;coutendlendl;循環(huán)左移類/實(shí)現(xiàn)所有行的循環(huán)移位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);本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!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);/獲取某一行中某一個(gè)字符串中的某一位置的字符char Shift:getChar(int lineIndex, int stringIndex, int charIndex)return lineShift.getChar(lineIndex,stringIndex,charIndex);/獲取行數(shù)本文檔如對(duì)你有幫助,請(qǐng)幫忙下載支持!int Shift:getLineNum(void)return lineShift.getLineNum();/獲取某一行的字符串個(gè)數(shù)int Shift:getStringNum(int lineIndex)return

21、lineShift.getStringNum(lineIndex);排序類/實(shí)現(xiàn)按首字母排序void FirstAlphaSort:alphaSort(Shift srcShiftLines)shiftLines=srcShiftLines;/ 將傳進(jìn)得Shift 對(duì)象賦值給成員變量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= ;/將找到的最小的字母置為,以便在下一次查找時(shí)不再保留/首字母排序vector FirstAlphaSort:getCharSort()return charSort;/獲取行數(shù)int FirstAlphaSort:getLineNum(void)return shiftLines.getLineNum();/按行的序號(hào),將各字符串合并成一個(gè)字符串,然后獲取一行/lineIndex 為行序號(hào)stri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論