KWIC實(shí)驗(yàn)總結(jié)報(bào)告(大學(xué)計(jì)算機(jī)C++)_第1頁
KWIC實(shí)驗(yàn)總結(jié)報(bào)告(大學(xué)計(jì)算機(jī)C++)_第2頁
KWIC實(shí)驗(yàn)總結(jié)報(bào)告(大學(xué)計(jì)算機(jī)C++)_第3頁
KWIC實(shí)驗(yàn)總結(jié)報(bào)告(大學(xué)計(jì)算機(jī)C++)_第4頁
KWIC實(shí)驗(yàn)總結(jié)報(bào)告(大學(xué)計(jì)算機(jī)C++)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告書 周新:2008082207軟件體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告書 周新:2008082207#軟件體系結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告書中國石油大學(xué)(北京)信息學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系制訂人:周新學(xué)號(hào):2008082207指導(dǎo)教師:朱雪峰博士2011年10月27日1、課程實(shí)驗(yàn)?zāi)康耐ㄟ^I )檢索系統(tǒng),對(duì)軟件體系結(jié)構(gòu)有更加深入的了解和認(rèn)識(shí)。通過運(yùn)用幾種體系結(jié)構(gòu),熟悉常見的軟件體系結(jié)構(gòu),并對(duì)這幾種結(jié)構(gòu)有進(jìn)一步了解。2、任務(wù)概述用管道過濾器,主程序、子程序,抽象數(shù)據(jù)類型,隱式調(diào)用這四種結(jié)構(gòu)來分別實(shí)現(xiàn)KWIC檢索系統(tǒng)。3、實(shí)現(xiàn)方法用C++主要實(shí)現(xiàn)了兩種結(jié)構(gòu):主程序、子程序結(jié)構(gòu),抽象數(shù)據(jù)類型。(1)KWIC1工程的入口函數(shù)int_tmain(intargc,_TCHAR*argv[]){//界面,結(jié)構(gòu)選擇cout<<"Inputaabsolutefilename:";charfilename[30];cin>>filename;cout<<"ChooseKWICfunction"<<endl<<"1isMainProgram/SubroutinewithSharedData"<<endl<<"2isAbstractDataTypes"<<endl;intchoose=0;cin>>choose;if(1==choose)//主程序和子程序{MainSubroutinemainSub;vector<vector<string>>lines=mainSub.readLines(filename);vector<LINE>lineIndex=mainSub.shiftString(lines);lineIndex=mainSub.firstAlphaSort(lineIndex,lines);mainSub.outPut(lineIndex,lines);}else//抽象收據(jù)類型{Lines*lines=newLines;Inputinput;Shift*shift=newShift;FirstAlphaSortalphaSort;Outputoutput;input.readLines(filename,*lines);shift->circularShift(*lines);alphaSort.alphaSort(*shift);output.print(alphaSort);deleteshift;deletelines;}return0;}(2)主程序、子程序結(jié)構(gòu)實(shí)現(xiàn)類/從/文件中按行讀取存儲(chǔ)從文件中讀取的行的臨時(shí)變量/按行讀取存0儲(chǔ)]從=行"中"取;字/符/串的臨時(shí)變量每/個(gè)單詞的截取條件為下一個(gè)字符為空格或者為行的末尾將從文件中中讀出的行加入到/循環(huán)左移獲取每一行的字符串個(gè)數(shù)對(duì)/第行循環(huán)(字符串個(gè)數(shù))次,生成循環(huán)移位后的對(duì)/第行循環(huán)(字符串個(gè)數(shù))次,生成循環(huán)移位后的聲明存放一行的行標(biāo)以及各列的列表的結(jié)構(gòu)體給行標(biāo)賦值循/環(huán)生成一行的列標(biāo)?。_\(yùn)算/字母排序逐/行提取各個(gè)字符串的首字母外面的兩層 循環(huán)是控制循環(huán)次數(shù)的內(nèi)部的兩層 循環(huán)是遍歷所有的字符串首字母,尋找最小的字母在原行矩陣中的位置按照 中的字符串的行標(biāo)和列標(biāo)輸出所有字符串(3)抽象數(shù)據(jù)類型結(jié)構(gòu)實(shí)現(xiàn)行存儲(chǔ)類增/加行參數(shù): 字符串向量列表/從存儲(chǔ)結(jié)構(gòu)中獲取某一行為獲取的行的序號(hào),從開始參數(shù):為獲取的行的序號(hào),從開始參返回獲取的行參增加字符串參數(shù): 為所添加字符串,為字符串所在行的序號(hào)(從開始)參獲取字符串為字符串在行中的序號(hào)參數(shù): 為行序號(hào)為字符串在行中的序號(hào)返參回獲取的字符串增/加字符參數(shù): 為增加的字符, 為增加的字符所在的字符串的序號(hào)為增加的字符所在的行的序號(hào)/獲/取字符參數(shù): 為行序號(hào), 為字符串的序號(hào), 為字符的序號(hào)參參返回獲取的字符獲參取總的行數(shù)獲/取特定行的字符串個(gè)數(shù)輸入類voidInput::readLines(char*filename,Lines&readLines){//vector<vector<string>>dst;ifstreaminfile(filename,ios::in);if(!infile){cout<<"openerror!"<<endl;exit(0);}chartemp[100]="";//存儲(chǔ)從文件中讀取的行的臨時(shí)變量int1m61口46*=0;//行序號(hào)//按行讀取while(infile.getline(temp,100)){intk=0,j=0;vector<string>line;line.swap(vector<string>());readLines.addLine(line);chars[20]="";//存儲(chǔ)從行中取字符串的臨時(shí)變量intstringIndex=0;//字符串序號(hào)readLines.addString(s,lineIndex);while(temp[k]!=0){if(temp[k]!=''){readLines.addChar(temp[k],stringIndex,lineIndex);}//每個(gè)單詞的截取條件為下一個(gè)字符為空格或者為行的末尾if(temp[k]==''&&temp[k+1]!=''){// readLines.addChar(temp[k],stringIndex,lineIndex);//將該字符串加入到指定行的指定字符串中//readLines.addChar('\0',stringIndex,lineIndex);s[0]='\0';〃清空字符串readLines.addString(s,lineIndex);5杠近81口46X++;//字符串序號(hào)力口1}k++;}lineIndex++;// dst.push_back(line);〃將從文件中中讀出的行加入到dst中}infile.close();for(inti=0;i<readLines.getLineNum();i++)for(intj=0;j<readLines.getStringNum(i);j++){cout<<readLines.getString(i,j)<<"";}cout<<endl;}cout<<endl<<endl;循環(huán)左移類//實(shí)現(xiàn)所有行的循環(huán)移位voidShift::circularShift(LinessrcLines)intlineIndex=0;for(introw=0;row<srcLines.getLineNum();row++)intcols=srcLines.getStringNum(row);for(intcol=0;col<cols;col++){vector<string>newLine;lineShift.addLine(newLine);for(intnewcol=0;newcol<cols;newcol++){lineShift.addString(srcLines.getString(row,(col+newcol)%cols),lineIndex);}lineIndex++;}}}//獲取所有行LinesShift::getLines(void){returnlineShift;}//獲取某一行vector<string>Shift::getLine(intlineIndex){returnlineShift.getLine(lineIndex);}}排序類//獲取某一行中某一位置的字符串stringShift::getString(intlineIndex,intstringIndex){returnlineShift.getString(lineIndex,stringIndex);}//獲取某一行中某一個(gè)字符串中的某一位置的字符charShift::getChar(intlineIndex,intstringIndex,intcharIndex){returnlineShift.getChar(lineIndex,stringIndex,charIndex);}//獲取行數(shù)intShift::getLineNum(void){returnlineShift.getLineNum();}//獲取某一行的字符串個(gè)數(shù)intShift::getStringNum(intlineIndex){returnlineShift.getStringNum(lineIndex);//實(shí)現(xiàn)按首字母排序voidFirstAlphaSort::alphaSort(ShiftsrcShiftLines){shiftLines=srcShiftLines;//將傳進(jìn)得Shift對(duì)象賦值給成員變量vector<char>firstChar;for(introw=0;row<shiftLines.getLineNum();row++){firstChar.push_back(shiftLines.getChar(row,0,0));//獲取首字母}//首字母排序for(intloop=0;loop<firstChar.size();loop++){charmin='z';introwIndex=0;for(introw=0;row<firstChar.size();row++){if(min>=firstChar[row]&&''!=firstChar[row]){min=firstChar[row];rowIndex=row;}}charSort.push_back(rowIndex);firstChar[rowIndex]='';//將找到的最小的字母置為‘’,以便在下一次查找時(shí)不再保留}}//首字母排序vector<int>FirstAlphaSort::getCharSort(){returncharSort;}//獲取行數(shù)intFirstAlphaSort::getLineNum(void){returnshiftLines.getLineNum();}//按行的序號(hào),將各字符串合并成一個(gè)字符串,然后獲取一行//lineindex為行序號(hào)stringFirstAlphaSort::getLineAsString(intlineIndex){stringlineString;for(intstrCount=0;strCount<shiftLines.getStringNum(lineIndex);strCount++){lineString+=shiftLines.getString(lineIndex,strCount)+"";}lineString+="\0";returnlineString;}輸出類//按字母表順序輸出voidOutput::print(FirstAlphaSortsortLines){for(introw=0;row<sortLines.getLineNum();row++){cout<<sortLines.getLineAsString(sortLines.getCharSort()[row])<<endl;}cout<<endl;}4、實(shí)驗(yàn)的例程(1)主程序、子程序運(yùn)行結(jié)果^nputaabsf^lutefilfinanetxtChoaseKUICfunction.isMainPregram/SubrcutinewithSharedData1選擇的實(shí)現(xiàn)結(jié)構(gòu)為主程序、子程序1選擇的實(shí)現(xiàn)結(jié)構(gòu)為主程序、子程序招ynameisshouxinjthisismycomputerTakecarethebabyi^elloHorldHells)WorldTakecareofthebabyWorldHellohahyTakecareofthe心axecfthehahyTakecomputerthisismyisismymymycomputerthiszhouxinmynamecomputerthisisnameiszhouxinisismymynameiszhouxinmy?!阾hebahyTakecaretliebabyTakecareofthisismycomputer^houxinmynameis請(qǐng)按任意鍵繼續(xù).(2)抽象收據(jù)類型

2選擇的2選擇的0實(shí)現(xiàn)結(jié)構(gòu)/‘為抽象數(shù)據(jù)類型InputaabsolutefilenameChooseKUICfunction1isMainProgran/SubroutinewithSharedData2isAbstractDataTypes2需ynameiszhouxinthisismyccjmpiiterTakecareofthebabyHelloWorldHelloWorldVakecareofthebabyyorldHelloLabyTakecareofthe::areofthebabvTakecomputerthisismyismycotiputerthisiszhouxinnynanemycomputerthisismynameiszhouxin;ianeiszhouxinmy□fthebabyTa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論