版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、軟件體系結構上機實驗報告書中國石油大學(北京)信息學院計算機科學與技術系制 訂 人:周新學號: 2008082207指導教師:朱雪峰博士2011年 10月 27日軟件體系結構實驗報告書周新: 20080822071、課程實驗目的通過 KWIC(Key Word in Context )檢索系統(tǒng),對軟件體系結構有更加深入的了解和認識。通過運用幾種體系結構,熟悉常見的軟件體系結構, 并對這幾種結構有進一步了解。2、任務概述用管道過濾器,主程序、子程序,抽象數(shù)據(jù)類型,隱式調用這四種結構來分別實現(xiàn) KWIC 檢索系統(tǒng)。3、實現(xiàn)方法用 C+主要實現(xiàn)了兩種結構:主程序、子程序結構,抽象數(shù)據(jù)類型。( 1)
2、KWIC1 工程的入口函數(shù)int _tmain(int argc, _TCHAR* argv)/界面,結構選擇coutfilename;coutChooseKWICfunctionendl1is MainProgram/SubroutinewithShared Dataendl2 is Abstract Data Typeschoose;if(1=choose)/ 主程序和子程序MainSubroutine mainSub;2軟件體系結構實驗報告書周新: 2008082207vectorvector lines=mainSub.readLines(filename);vector lineIn
3、dex=mainSub.shiftString(lines);lineIndex=mainSub.firstAlphaSort(lineIndex,lines);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.alphaSor
4、t(*shift);output.print(alphaSort);delete shift;delete lines;return 0;2)主程序、子程序結構實現(xiàn)類從文件中按行讀取vectorvector MainSubroutine:readLines(char* filename)3軟件體系結構實驗報告書周新: 2008082207vectorvector dst;ifstream infile(filename,ios:in);if(!infile)coutopen error!endl;exit(0);char temp100=;/存儲從文件中讀取的行的臨時變量按行讀取while(i
5、nfile.getline(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;4軟件體系結構實驗報告書周新: 2008082207string 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;5軟件體系結構實驗報告書周新: 2008082207coutendlendl;return dst;循環(huán)左移vectorMainSubroutine:shiftString(vectorvectorsrcLines)vector shiftLines;for(int row=0;rowsrcLines.size();row+)int colnum=srcLinesrow
7、.size();/獲取每一行的字符串個數(shù)/對第 row 行循環(huán) colnum(字符串個數(shù)) 次,生成循環(huán)移位后的colnum行for(int col=0;colcolnum;col+)LINE linePos;/聲明存放一行的行標以及各列的列表的結構體linePos.rowIndex=row;/給行標賦值循環(huán)生成一行的列標for(int colshift=0;colshiftcolnum;colshift+)取6軟件體系結構實驗報告書周新: 2008082207模運算shiftLines.push_back(linePos);return shiftLines;字母排序vectorMainSu
8、broutine:firstAlphaSort(vectorlineIndex,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 rowPo
9、s=0;int colPos=0;7軟件體系結構實驗報告書周新: 2008082207外面的兩層 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;colPos=col;
10、min=firstCharrowcol;firstCharrowPoscolPos= ;int linePos=0;/在原行矩陣中的位置for(int line=0;linerowPos;line+)linePos+=srcLinesline.size();8軟件體系結構實驗報告書周新: 2008082207linePos=linePos+colPos;dstIndex.push_back(lineIndexlinePos);return dstIndex;按照 lineIndex 中的字符串的行標和列標輸出所有字符串voidMainSubroutine:outPut(vectorlineIn
11、dex,vectorvector srcLines)for(int row=0;rowlineIndex.size();row+)for(int col=0;collineIndexrow.colIndex.size();col+)coutsrcLineslineIndexrow.rowIndexlineIndexrow.colIndexcol ;coutendl;coutendl;3)抽象數(shù)據(jù)類型結構實現(xiàn)行存儲類9軟件體系結構實驗報告書周新: 2008082207增加行參數(shù): line 字符串向量列表void Lines:addLine(vector line)lines.push_back
12、(line);從存儲結構中獲取某一行/ 參數(shù): lineIndex為獲取的行的序號,從0 開始返回獲取的行vector Lines:getLine(int lineIndex)return lineslineIndex;增加字符串/ 參數(shù):instring為所添加字符串, lineIndex為字符串所在行的序號(從 0 開始)void Lines:addString(string instring, int lineIndex)lineslineIndex.push_back(instring);獲取字符串/ 參數(shù): lineIndex為行序號, stringIndex為字符串在行中的序號返回
13、獲取的字符串10軟件體系結構實驗報告書周新: 2008082207string Lines:getString(int lineIndex,int stringIndex)return lineslineIndexstringIndex;增加字符參數(shù): inchar 為增加的字符, stringIndex 為增加的字符所在的字符串的序號,lineIndex為增加的字符所在的行的序號void Lines:addChar(char inchar, int stringIndex, int lineIndex)lineslineIndexstringIndex.push_back(inchar);獲
14、取字符/ 參數(shù): lineIndex為行序號, stringIndex為字符串的序號,charIndex為字符的序號返回獲取的字符char Lines:getChar(int lineIndex, int stringIndex, int charIndex)return lineslineIndexstringIndexcharIndex;獲取總的行數(shù)int Lines:getLineNum(void)return lines.size();11軟件體系結構實驗報告書周新: 2008082207獲取特定行的字符串個數(shù)int Lines:getStringNum(int lineIndex)r
15、eturn lineslineIndex.size();輸入類void Input:readLines(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;12軟件體系結構實驗報告書周新: 2008082
16、207vector line;line.swap(vector();readLines.addLine(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,
17、lineIndex);/ 將該字符串加入到指定行的指定字符串中readLines.addChar(0,stringIndex,lineIndex); s0=0;/ 清空字符串readLines.addString(s,lineIndex);stringIndex+;/ 字符串序號加1k+;13軟件體系結構實驗報告書周新: 2008082207lineIndex+;/dst.push_back(line);/ 將從文件中中讀出的行加入到dst 中infile.close();for(int i=0;ireadLines.getLineNum();i+)for(int j=0;jreadLines
18、.getStringNum(i);j+)coutreadLines.getString(i,j) ;coutendl;coutendlendl;循環(huán)左移類/實現(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+)14軟件體系結構實驗報告書周新: 2008082207vector newLine;lineShi
19、ft.addLine(newLine);for(int newcol=0;newcolcols;newcol+)lineShift.addString(srcLines.getString(row,(col+newcol)%cols),lineIndex);lineIndex+;/獲取所有行Lines Shift:getLines(void)return lineShift;/獲取某一行vector Shift:getLine(int lineIndex)return lineShift.getLine(lineIndex);15軟件體系結構實驗報告書周新: 2008082207/獲取某一行中
20、某一位置的字符串string Shift:getString(int lineIndex,int stringIndex)return lineShift.getString(lineIndex,stringIndex);/獲取某一行中某一個字符串中的某一位置的字符char Shift:getChar(int lineIndex, int stringIndex, int charIndex)return lineShift.getChar(lineIndex,stringIndex,charIndex);/獲取行數(shù)int Shift:getLineNum(void)return lineSh
21、ift.getLineNum();/獲取某一行的字符串個數(shù)int Shift:getStringNum(int lineIndex)return lineShift.getStringNum(lineIndex);排序類16軟件體系結構實驗報告書周新: 2008082207/實現(xiàn)按首字母排序void FirstAlphaSort:alphaSort(Shift srcShiftLines)shiftLines=srcShiftLines;/ 將傳進得Shift 對象賦值給成員變量vector firstChar;for(int row=0;rowshiftLines.getLineNum();
22、row+)firstChar.push_back(shiftLines.getChar(row,0,0);/獲取首字母/首字母排序for(int loop=0;loopfirstChar.size();loop+)char min=z;int rowIndex=0;for(int row=0;row=firstCharrow& !=firstCharrow)min=firstCharrow;rowIndex=row;charSort.push_back(rowIndex);firstCharrowIndex= ;/將找到的最小的字母置為,以便在下一次查找時不再保留17軟件體系結構實驗報告書周新: 2008082207/首字母排序vector FirstAlphaSort:getCharSort()return charSort;/獲取行數(shù)int FirstAlphaSort:getLineNum(void)return shiftLines.getLineNum();/按行的序號,將各字符串合并成一個字符串,然后獲取一行/lineIndex 為行序號string FirstA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色環(huán)保廠房裝飾裝修工程承包合同4篇
- 2024水庫魚塘承包養(yǎng)殖與市場拓展合作協(xié)議2篇
- 2025年度產(chǎn)權房屋買賣定金合同產(chǎn)權過戶范本3篇
- 2025年度廠房買賣合同范本(新能源產(chǎn)業(yè)適用)4篇
- 二零二五年度網(wǎng)絡安全服務提供商保密及數(shù)據(jù)處理協(xié)議3篇
- 二零二五年度船舶氣象預報船員聘用合同范本3篇
- 個人IT崗位保密條款合同(2024版)版B版
- 2025年度XX地區(qū)水資源綜合利用項目合作協(xié)議3篇
- 2025年度智能自動化廠房車間租賃合同4篇
- 2025年度嬰幼兒用品配送與安全監(jiān)管合同4篇
- 100個超高難度繞口令大全
- 《鄭伯克段于鄢》-完整版課件
- (日文文書模板范例)請求書-請求書
- 土壤肥料全套課件
- 畢業(yè)生延期畢業(yè)申請表
- 學校6S管理制度
- 肽的健康作用及應用課件
- T.C--M-ONE效果器使用手冊
- 8小時等效A聲級計算工具
- 人教版七年級下冊數(shù)學計算題300道
- 社會實踐登記表
評論
0/150
提交評論