第二次作業2

2022-05-11 18:18:01 字數 3425 閱讀 4248

本次作業是乙個詞頻統計的小程式,要求如下

一、程式使用比較常用的c++進行編寫,初步設想中,編寫這樣乙個程式需要解決下列問題:(其實不都是事先想的,有的是程式設計中遇到的問題,但是很難分清,為了行文流暢,故都放在前面)

1.檔案的讀寫,包括type關鍵字文字的寫入

2.單詞的劃分,包括空格與標點

3.檔案列表的獲取,包括了路徑和檔案的查詢。

5.詞頻的統計。

6.版本的控制,使用github進行,以前沒有用過。

之後編寫程式並使用搜尋引擎來解決遇到的問題。

#1.檔案的讀寫

對於的操作是type關鍵字。當檢測到使用者輸入type關鍵字時,呼叫writetxt函式

1

void writetxt(const vectorsplits)214

else

15 cout << "

cannot open this file!

"<

1617 }

對於檔案的讀入,沒有進行特殊的處理,略。

2.單詞的劃分本來想要自己進行劃分,但是查到乙個函式ispunct(),可以直接判斷某個字元是否是標點,於是就簡化了一些

去除空格與無效字元就可以了,先去除無效字元,然後去除空格

去除空格的方法如下,大概是找到兩個空格,中間的為乙個單詞,將其儲存。

1

void split(const

string inputs, vector&splits)

213 pos1 = pos2 +block.size();

14 pos2 =inputs.find(block, pos1);15}

16if (pos1 !=inputs.length())

17splits.push_back(inputs.substr(pos1));

18 }

3.檔案列表的獲取

dir命令要求顯示目錄下的所有文件,需要知道路徑。通過搜尋引擎搜尋,知道了乙個函式getcwd,可以獲取當前目錄的絕對路徑,比較容易就可以得到檔案的路徑了。同時還有乙個用於檔案查詢的結構體_finddata_t

整個dir命令顯示列表的**如下,首先查詢路徑然後使用結構體_finddata_t來查詢檔案,將結果存在string型的向量lists中

1 vector dir(const

string

path)2;

6stringp;7

\\");9

\\*"

);11 vectorlists;

12_finddata_t filedir;

13long

lfdir;

1415

if ((lfdir = _findfirst(p.c_str(), &filedir)) != -1l)16

22 } while (_findnext(lfdir, &filedir) == 0

);2324}

25_findclose(lfdir);

26return

lists;

27 }

4.對於不同關鍵字的處理

其中,若是輸入type則進行寫檔案操作(前文已經提到),輸入dir則進行展示檔案列表的操作(3中提到)。

而wf則比較複雜,wf後面共有三種形式

(1)-s *.txt

(2)檔名

(3)資料夾名

因為這三種處理方式是不同的,所以要先進行判斷

首先用了很土的辦法,判斷後面是幾個字元,將(1)與(2)和(3)分開,而怎麼判斷是否是檔名與資料夾名起初並不會,後來知道可以使用_s_ifdir & buf.st_mode來判斷型別是否是directory。知道這個之後這個問題就比較簡單,這裡不貼**了。

5.詞頻的統計

使用了map進行統計,其中key為string,value為int,若出現新的單詞,則建立新的節點,若出現重複的單詞,則value加1。

用sort排序後將結果輸出,總詞數即為節點個數。

1

for (vector::iterator it = words.begin(); it != words.end(); it++)25

6 vectorstring, int>>final;

7copy(statis.begin(), statis.end(), back_inserter(final));

8sort(final.begin(), final.end(), cmp);

9return final;

6.版本控制

使用tortoisegit 進行push。

位址是二、截圖

三、psp

任務預估時間(min)

時間花費時間(min)

前期學習與準備

6090

讀寫函式

1015

單詞劃分

2090

檔案的顯示(dir函式)

30105

關鍵字的處理530

詞頻統計

1030

整合30

90版本控制

30120

合計195

570原因:這次的專案耗費時間的地方主要有以下幾個方面

(1)學習使用vector。考慮到容器比較適合編寫這個程式,所以想試試。但是以前很少使用vector,用起來非常不熟練,也比較依賴搜尋引擎,這一部分花了比較多的時間。

(2)對於一些常用的函式和解決方法不熟悉,特別是在檔案和路徑這一部分。在一些問題上會卡住,但是實際上可能有函式可以直接解決這個問題(前文提到了)。

(3)長時間不程式設計程式設計生疏,從準備的時間到整合的時間以及在實現過程中都花的比想像中的要長很多,有的時候越變越蒙。

(4)需求理解問題。

最初看見這兩句話,想當然的認為功能一統計不重複的詞,功能二統計總詞數。期間也和同學有了很多討論,**改來改去,後來最後一天才最終確定要統計不重複詞。以後應該第一時間問清楚。

第二次作業(2)

結對專案 第二次作業 本次作業 deadline 2020 3 3 10 00pm 大家經過一周辛苦的問卷制定 資料收集和資料分析整理,從茫然不知所措,到發紅包請人填問卷,到逐步上手資料整理分析,從自己親身經歷的角度體驗了一把 資料 來之不易。更重要的是,經過資料整理和分析,你們從乙個更高的視角來看...

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...

第二次作業

第一題 p1 1 遞迴寫法,效率低 include 1.寫乙個函式返回引數值為1的個數 比如 15 0000 1111 4個1 程式原型 int count one bits unsigned int value int fuc int x else return 0 void mainp1 p1 ...