版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋買賣合同的二手房買賣合同
- 購(gòu)銷學(xué)校帳篷合同書
- 行車安全保障函
- 網(wǎng)絡(luò)電商合作合同樣本
- 臨時(shí)工合同書
- 電力使用安全責(zé)任
- 家用中央空調(diào)采購(gòu)合同
- 軟裝材料選購(gòu)協(xié)議
- 忠誠(chéng)守護(hù)男友的誓言
- 工程分包合同分項(xiàng)工程
- 語(yǔ) 文病句專題講練-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 第三單元(復(fù)習(xí)課件)一年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版2024秋)
- 2024年大學(xué)試題(計(jì)算機(jī)科學(xué))-數(shù)字圖像處理考試近5年真題集錦(頻考類試題)帶答案
- 文旅深度融合長(zhǎng)期發(fā)展規(guī)劃
- ASTM-D3359-(附著力測(cè)試標(biāo)準(zhǔn))-中文版
- 5 協(xié)商決定班級(jí)事務(wù) (教學(xué)設(shè)計(jì))-2024-2025學(xué)年道德與法治五年級(jí)上冊(cè)統(tǒng)編版
- 2024年清潔機(jī)器人項(xiàng)目合作計(jì)劃書
- 高校實(shí)驗(yàn)室安全通識(shí)課學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 銀行客戶經(jīng)理招聘面試題與參考回答(某大型集團(tuán)公司)
- 殘疾人體育活動(dòng)推廣與普及考核試卷
- 《安全系統(tǒng)工程》期末考試卷及答案
評(píng)論
0/150
提交評(píng)論