码云链接:https://gitee.com/coNgY1/projects
(1)合作者:201631062122,201631062321
(1)、制定编码规范
变量命名必须有意义,做到见名知用途所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式注释应简洁清晰地描述代码用途一个变量仅用一行语句声明{和}单独占一行(2)、代码自审并修正经过代码自审发现了以下问题
最开始没有判断-s参数,导致输入数据时候没有输出所有的文件
最开始没有判断参数的个数,导致错误
代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<fstream> #include<string> #include<sstream> #include<algorithm> #include<vector> #include<io.h> using namespace std; class CFileRecord { private: int m_Wordnum; int m_Charnum; int m_Linenum; int m_Codeline; int m_Spaceline; int m_Noteline; string m_record; const string OUT_FILE = "result.txt"; ifstream input; ofstream out; private: bool IsStopword(string szWord); public: string m_szFile; vector<string> m_mode; vector<string> m_Stopword; public: CFileRecord(); ~CFileRecord() { if (input.is_open()) input.close(); if (out.is_open()) { out << m_record; out.close(); } }; inline int GetCharnum() { return m_Charnum; } inline int GetLinenum() { return m_Linenum; } inline int GetWordnum() { return m_Wordnum; } void GetStopword(string szStopFile); inline string GetHang() { char szFormat[0x20] = {0}; sprintf(szFormat, "%d//%d//%d",m_Codeline,m_Spaceline,m_Noteline); return szFormat; } void OutRecord(string szFile) { ofstream out(szFile, ostream::ate); if (out.is_open()) { for (auto iter = m_mode.begin(); iter != m_mode.end(); iter++) { if (*iter == "-c") out << "字符数 : " + to_string(m_Charnum) + "\r\n"; else if (*iter == "-l") out << "行数 : " + to_string(m_Linenum) + "\r\n"; else if (*iter == "-w") out << "单词数 : " + to_string(m_Wordnum) + "\r\n"; else if(*iter == "-a") out << m_szFile << ",代码行/空行/注释行" << GetHang() << endl; } out.close(); } } void OpenFile(string szFile); void UpdateData(); void PrintData(); }; vector<string> GetAllfile(); int main(int argc, char **argv) { string szInfile; string mode; if (argc % 2 == 0) { //cout << "wrong param!" << endl;; return 1; } { szInfile = argv[2]; CFileRecord CRecord; for (int i = 1; i < argc; i ++) { mode = argv[i]; if (mode.find(".") != -1) CRecord.m_szFile = mode; else { CRecord.m_mode.push_back(mode); if (mode == "-e") CRecord.GetStopword(argv[++i]); } } CRecord.PrintData(); } getchar(); return 0; } bool CFileRecord::IsStopword(string szWord) { for (auto word : m_Stopword) { if (word == szWord) return true; } return false; } CFileRecord::CFileRecord() :m_Wordnum(0), m_Charnum(0), m_Linenum(0), out(OUT_FILE) { } void CFileRecord::GetStopword(string szStopFile) { ifstream iFile(szStopFile); string word,szLine; while (getline(iFile, szLine)) { istringstream iss(szLine); while (iss >> word) { m_Stopword.push_back(word); } } } void CFileRecord::OpenFile(string szFile) { if(input.is_open()) input.close(); input.open(szFile); m_szFile = szFile; } void CFileRecord::UpdateData() { m_Linenum = 0; m_Wordnum = 0; m_Charnum = 0; m_Codeline = 0; m_Spaceline = 0; m_Noteline = 0; if (input.is_open()) { string szLine; while (getline(input, szLine)) { m_Linenum++; m_Charnum += szLine.size(); istringstream record(szLine); if (szLine.find_first_of("") == 0 || szLine.find_first_of("}//") == 0) m_Noteline++; else if (szLine.empty()) m_Spaceline++; else m_Codeline++; string word; if (find(m_mode.begin(), m_mode.end(), "-e") != m_mode.end()) { while (record >> word) { if (IsStopword(word)) continue; m_Wordnum += count(begin(word), end(word), ',') + 1; } } else { while (record >> word) { m_Wordnum += count(begin(word), end(word), ',') + 1; } } } } m_record += m_szFile + ",字符数 : " + to_string(m_Charnum) + "\r\n" + m_szFile + ",单词数 : " + to_string(m_Wordnum) + "\r\n" + m_szFile + ",行数 : " + to_string(m_Linenum) + "\r\n" + m_szFile + ",代码行/空行/注释行" + GetHang() + "\r\n" ; } void CFileRecord::PrintData() { if (find(m_mode.begin(), m_mode.end(), "-s") != m_mode.end()) { vector<string> vecFile = GetAllfile(); for (auto iter = vecFile.begin(); iter != vecFile.end(); iter++) { OpenFile(*iter); UpdateData(); if (find(m_mode.begin(), m_mode.end(), "-c") != m_mode.end()) cout << m_szFile << ",字符数: " << GetCharnum() << endl; if (find(m_mode.begin(), m_mode.end(), "-l") != m_mode.end()) cout << m_szFile << ",行数: " << GetLinenum() << endl; if (find(m_mode.begin(), m_mode.end(), "-w") != m_mode.end()) cout << m_szFile << ",单词数: " << GetWordnum() << endl; if (find(m_mode.begin(), m_mode.end(), "-a") != m_mode.end()) cout << m_szFile << ",代码行/空行/注释行" << GetHang() << endl; if (find(m_mode.begin(), m_mode.end(), "-o") != m_mode.end()) OutRecord(m_szFile); } } else { OpenFile(m_szFile); UpdateData(); if (find(m_mode.begin(), m_mode.end(), "-c") != m_mode.end()) cout << m_szFile << ",字符数: " << GetCharnum() << endl; if (find(m_mode.begin(), m_mode.end(), "-l") != m_mode.end()) cout << m_szFile << ",行数: " << GetLinenum() << endl; if (find(m_mode.begin(), m_mode.end(), "-w") != m_mode.end()) cout << m_szFile << ",单词数: " << GetWordnum() << endl; if (find(m_mode.begin(), m_mode.end(), "-a") != m_mode.end()) cout << m_szFile << ",代码行/空行/注释行" << GetHang() << endl; if (find(m_mode.begin(), m_mode.end(), "-o") != m_mode.end()) OutRecord(m_szFile); } } vector<string> GetAllfile() { vector<string> vecstr; _finddata_t sFind; long result = 0; result = _findfirst("*.txt", &sFind); if (result == -1) return vecstr; do { vecstr.push_back(sFind.name); } while (_findnext(result, &sFind) != -1); return vecstr; }(4)、静态代码审查 本次审查使用工具VS的扩展工具StyleCop,未检查出问题
(5)、性能测试和优化 本项目采用的性能测试工具:JProfilerJProfiler直觉式的GUI可以找到性能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。 它让程序员对heap walker作资源回收器的root analysis,可以轻易找出内存漏失。通过性能测试,我们找出了一些内存消耗的代码并对其进行了优化,提升了代码执行性能。
转载于:https://www.cnblogs.com/coNgY1/p/9826926.html