Git項目地址 | 項目地址 |
---|---|
姓名 | 曲晨陽 |
學號 | 201831061313 |
結對夥伴 | 潘偉鍵 |
夥伴博客地址 | https://www.cnblogs.com/pwj1278634240/ |
學號 | 201831061312 |
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 30 | 43 |
· Estimate | · 估計這個任務須要多少時間 | 1200 | 1500 |
Development | 開發 | 60 | 90 |
· Analysis | · 需求分析 (包括學習新技術) | 30 | 60 |
· Design Spec | · 生成設計文檔 | 40 | 20 |
· Design Review | · 設計複審 (和同事審覈設計文檔) | 30 | 30 |
· Coding Standard | · 代碼規範 (爲目前的開發制定合適的規範) | 20 | 30 |
· Design | · 具體設計 | 120 | 150 |
· Coding | · 具體編碼 | 600 | 800 |
· Code Review | · 代碼複審 | 200 | 300 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 120 | 150 |
Reporting | 報告 | 30 | 60 |
· Test Report | · 測試報告 | 20 | 20 |
· Size Measurement | · 計算工做量 | 30 | 35 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 30 | 30 |
合計 | 2560 | 3318 |
統計input.txt中的如下幾個指標 1.統計文件的字符數: 只須要統計Ascii碼,漢字不需考慮 空格,水平製表符,換行符,均算字符 英文字母:A-Z,a-z 字母數字符號:A-Z,a-z,0-9 分割符:空格,非字母數字符號 例;file123是一個單詞,123file不是一個單詞。file,File和FILE是同一個單詞輸出的單詞統一爲小寫格式 2.統計文件的單詞總數,單詞:至少以4個英文字母開頭,跟上字母數字符號,單詞以分隔符分割,不區分大小寫。 3.統計文件的有效行數:任何包含非空白字符的行,都須要統計。 4.統計文件中各單詞的出現次數,最終只輸出頻率最高的10個。頻率相同的單詞,優先輸出字典序靠前的單詞。 輸出的格式爲 · characters: number · words: number · lines: number · <word1>: number · <word2>: number · ...
題目要求統計一個文本文檔中的字符數,單詞數等,咱們的思路是先把文檔中的字符所有取出來,存在一個string類的字符串裏,而後再進行計數等操做。 在解題過程當中,我和個人搭檔首先進行了分工,我負責寫出main函數和計算字符的函數,個人搭檔潘偉鍵負責寫出單詞統計和輸出十個高頻詞彙的函數。 分工完成後,我和偉鍵同時進行編碼活動,這個過程不是獨立的,在編代碼時咱們常常交流,互相給出意見,這樣最終的代碼吻合度高,開發效率也很不錯。
總代碼:ios
#include <string> #include <fstream> #include <sstream> #include <iostream> using namespace std; //寫入文件 ofstream tongji("output.txt", ios::app); class word_count { private: string str; public: //輸出原文 void output() { cout << "原文:" << endl; cout << str << endl; } //統計字符數 int countzifu() { int i = 0; int sum = 0; while (str[i] != '\0') { if (str[i] <= 126 && str[i] >= 32 || str[i] == 10 || str[i] == 13) sum++; i++; } return sum; cout << endl << "字符個數:" << sum << endl; tongji << "字符個數:" << sum << '\n'; } //將文件中的字符存入一個string字符串 void getinstr(stringstream &s) { str = s.str(); } //判斷是否是有效單詞 int judgeword(string a) { int i = a.size(), n; if (i < 4) { return 0; } for (n = 0; n < 4; n++) { if (a[n] < 65 || 91 <= a[n] && a[n] < 96 || a[n]>123 && a[n] < 127) return 0; } return 1; } //把大寫字母轉化爲小寫字母 void turn(string& a) { int n = 0; while (a[n] != '\0') { if ('A' <= a[n] && a[n] <= 'Z') a[n] = a[n] + 32; n++; } } //輸出前十個高頻詞彙 void tenword(string a[500], int n) { int j, k, p = 0, t = 0, i; string b[500]; int count[500]; int count1[500]; int count3[500]; for (k = 0; k < n; k++) { count[k] = 1; for (j = 0; j < n; j++) { if (b[j] == a[k]) { count[j]++; break; } } if (j == n) { b[p] = a[k]; p++; } } for (k = 0; k < n; k++) { count1[k] = count[k]; count3[k] = k; } for (i = 0; i < n - 1; ++i) { // 二重循環完成選擇排序 k = i; for (j = i + 1; j < n; ++j) { if (count1[k] < count1[j]) k = j; } if (k != i) { t = count1[k]; count1[k] = count1[i]; count1[i] = t; t = count3[i]; // 輔助數組同步操做 count3[i] = count3[k]; count3[k] = t; } } for (k = 0; k < 10; k++) { cout << '<' << b[count3[k]] << ">: " << count[count3[k]] << endl; tongji << '<' << b[count3[k]] << ">: " << count[count3[k]] << '\n'; } } //把string a轉化爲單詞 int readword() { int n = 0; int i = 0; int j = 0; int count = 0; string b[500]; string c[500]; while (str[i] != '\0') { if (str[i] != 32 && str[i] != 44 && str[i] != 46) { b[n] = b[n] + str[i]; i++; } else { n++; i++; } } for (j = 0; j < n; j++) { if (judgeword(b[j]) == 1) { turn(b[j]); c[count] = b[j]; count++; } } tenword(c, count); return count; } }; int main() { int a; fstream wordfill("input.txt");//打開文檔文件 stringstream ss; ss << wordfill.rdbuf(); word_count count1; ofstream tongji("output.txt", ios::app);//寫入文件 count1.getinstr(ss);//將文件中的字符存入一個string字符串 count1.output();//輸出原文 a = count1.countzifu();//調用統計字符函數 cout << endl << "字符個數:" << a << endl; tongji << "字符個數:" << a << '\n'; a = count1.readword();//調用單詞統計函數 cout << "單詞個數:" << a << endl; tongji << "單詞個數:" << a << '\n'; tongji.close(); }
我和個人同伴把寫好的函數合併起來,而後共同封裝成一個wordcount類,其中發現了一些輸出錯誤,進行了改正。git
- 性能分析:
github
- 單元測試:
編程
此次做業能夠說是第二次做業的一次升級,使用第二次學習的工具,經過結對編程的方式完成這個題目,個人結對搭檔潘偉鍵很是認真負責,寫的代碼很完美,都完成了要求的功能,最後在單元測試上面卡了好久好久,最後詢問了同窗才得以解決,在第二次做業時就沒有學好,在之後的做業中還要更加認真去學習。數組