報告題目: 文學研究助手
班級: 業計算10專本
姓名: ***xx
完成日期: 2011-5-15
一、問題描述:
文學研究人員需要統計某篇英文**中某些形容詞的出現次數和位置。試寫乙個實現這一目標的文字統計系統,稱為「文學研究助手」。
英文**存於乙個文字檔案中。待統計的詞彙集合要一次輸入完畢,即統計工作必須在程式的一次執行之後就全部完成。程式的輸出結果是每個詞的出現次數和出現位置所在行的行號,格式自行設計。
二、需求分析:
1、 文字串非空且以檔案形式存放,統計匹配的詞集非空。檔名和詞集均使用者從鍵盤輸入;
2、 「單詞」定義:由字母構成的字串行,中間不含空格字元且區分大小寫;
3、 待統計的「單詞」在文字串中不跨行出現,它或者從行首開始,或者前置若干空格字元;
4、 在計算機終端輸出的結果是:單詞,出現的次數,出現的位置所在行的行號,同一行出現兩次的只輸出乙個行號;
5、 測試資料:將實驗的源程式作為測試檔案,從中任意選取「單詞」作為測試的詞集。
三、概要設計:
採用擷取字串、比較字串的模式來完成「單詞匹配比較」,從而統計出其出現的位置和次數。
1、資料結構定義:
程式將涉及到如下兩個線性表結構的資料型別,用類c語言描述如下:
(1) 定義從文字讀取的「單詞串」型別:
adt filestring;
資料關係:r1={} | si-1,si ∈ d,i = 1,2,3,…..,n}
基本操作:
createfilestring (fslist & fsl);
初始條件:已知乙個空的「文字單詞串表頭」;
操作結果:生成乙個空的「文字單詞串串行」;
insertfilestring (fslist & fsl,string str,int row);
初始條件:fsl為文字字串序列的表頭str為乙個標準的c++字串,row代表了字串出現的行數;
操作結果:將str插入到文字字串序列中,不需要排序;若fsl為空表頭,則建立乙個字串序列;否則插在字串序列尾部;
getfslength (fslist fsl);
初始條件:fsl為文字字串序列的表頭;
操作結果:獲取以fsl為表頭的文字字串的長度
printfilestring (fslist fsl);
初始條件:fsl為文字字串序列的表頭;
操作結果:列印以fsl為表頭的文字字串中的所有字串;
readfile (fslist & fsl);
初始條件:fsl為文字字串序列的表頭;
操作結果:從檔案中讀取字串序列,並將其保留在以fsl為表頭的字串序列中;
clearfilestring (fslist & fsl);
初始條件:fsl為文字字串序列的表頭;
操作結果:以fsl為表頭的文字字串序列被清空;
}adt filestring
(2) 定義從鍵盤讀取的「單詞串」型別:
adt keystring;
資料關係:r1={} | si-1,si ∈ d,i = 1,2,3,…..,n}
基本操作:
createkeystring (kslist & ksl);
初始條件:已知乙個空的「鍵盤單詞串表頭」;
操作結果:生成乙個空的「鍵盤單詞串串行」;
insertkeystring (kslist & ksl,string str,int row);
初始條件:ksl為鍵盤字串序列的表頭str為乙個標準的c++字串,row代表了字串出現的行數;
操作結果:將str插入到鍵盤字串序列中,不需要排序;若ksl為空表頭,則建立乙個字串序列;否則插在字串序列尾部;
getkslength (kslist ksl);
初始條件:ksl為鍵盤字串序列的表頭;
操作結果:獲取以ksl為表頭的鍵盤字串的長度
printkeystring (kslist ksl);
初始條件:ksl為鍵盤字串序列的表頭;
操作結果:列印以ksl為表頭的鍵盤字串中的所有字串;
readkey (kslist & ksl);
初始條件:ksl為文字字串序列的表頭;
操作結果:從鍵盤中讀取字串序列,並將其保留在以ksl為表頭的字串序列中;
clearkeystring (kslist & ksl);
初始條件:ksl為文字字串序列的表頭;
操作結果:以ksl為表頭的文字字串序列被清空;
}adt keystring
2、模組設計:
1) 主程式模組:主函式設計如下
int main ( ) filestring,*fslist;
/*** 從鍵盤讀取的字串集合
*/typedef struct keystringkeystring,*kslist;
/*** 匹配文字字串和鍵盤字串的模式匹配排除符集合
*/typedef char * model;
3、主要演算法設計:
/*** 在檔案字串集合中插入新的字串
*/int insertfilestring(fslist & fsl,string str,int row)
s->name = str;
s->row = row;
s->next = null;
tp->next = s順序插入
return 1;
}/**
* 從檔案中讀取串
*/int readfile(fslist & fsl)
ifstream fs = ifstream(url開啟檔案讀取字串
if(!fs)
int rowline = 1;
string s;
while(fs.peek()!=eof遇到檔案尾符,結束讀取
getline(fs,s,'\n依行讀取s
insertfilestring(fsl,s,rowline將獲取的字串插入檔案字串集合
return 1;
}/**
* 統計模式匹配排除字元
*/int getmodelexception(model & model)
if(cin.peek()=='\n')
cin.get(model[i++]);
}//預設的模式匹配排除符
model[imodel[i+1model[i+2model[i+3model[i+4] = '\"';
model[i+5model[i+6model[i+7model[i+8model[i+9] = '$';
model[i+10model[i+11model[i+12model[i+13model[i+14] = ')';
model[i+15model[i+16model[i+17model[i+18model[i+19] = '\\';
資料結構實習報告
接著猜的人再根據出題者的幾a幾b繼續猜,直到猜中為止。次數限制 有的時候,這個遊戲有猜測次數上的限制。根據計算機測算,這個遊戲,如果以最嚴謹的計算,任何數字可以在7次之內猜出。而有些地方把次數限制為6次或更少,則會導致有些數可能猜不出來。而有些地方考慮到人的邏輯思維難以達到計算機的那麼嚴謹,故設定為...
資料結構實習報告
實習報告 題目 編制解決約瑟夫環問題的程式 班級 09052713 姓名 張靜 學號 09052304 完成日期 2010.11.20 一 需求分析 1.利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序印出各人的編號。2.演示程式以使用者和計算機的對話方式執行,即在計算機上顯示 提示資訊 之後,由...
資料結構實習報告
實習報告 題目 運動會分數統計 班級 計算機學院031021班姓名 雷凱躍學號 03102013 一 需求分析 1.在該程式中,參賽學校編號為1 n n 20 比賽分成m m 30 個男子專案和w w 20 個女子專案,分別編號為1 m和m 1 m w,姓名長度不超過20個字元 2.輸入各個專案資訊...