zoukankan      html  css  js  c++  java
  • 第一次作业 PSP 代码规范 项目所得

    第一次作业

    要求:

    1. 截止日期

      2018年3月29日23:59 

      要求

      1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数、单词数、行数、词频,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

      2. 使用性能测试工具进行分析,找到性能的瓶颈并改进

      3. 对代码进行质量分析,消除所有警告

      http://msdn.microsoft.com/en-us/library/dd264897.aspx

      4. 设计10个测试样例用于测试,确保程序正常运行(例如:空文件,只包含一个词的文件,只有一行的文件,典型文件等等)

      5. 使用Github进行代码管理

      6. 撰写博客 

       

      基本功能

      1. 统计文件的字符数(只需要统计Ascii码,汉字不用考虑,换行符不用考虑,''不用考虑)(ascii码大小在[32,126]之间)

      2. 统计文件的单词总数

      3. 统计文件的总行数(任何字符构成的行,都需要统计)(不要只看换行符的数量,要小心最后一行没有换行符的情形)(空行算一行)

      4. 统计文件中各单词的出现次数,输出频率最高的10个。

      5. 对给定文件夹及其递归子文件夹下的所有文件进行统计

      6. 统计两个单词(词组)在一起的频率,输出频率最高的前10个。

      7. 在Linux系统下,进行性能分析,过程写到blog中(附加题) 

      注意:

      a) 空格,水平制表符,换行符,均算字符

      b) 单词的定义:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。

      英文字母:A-Z,a-z

      字母数字符号:A-Z,a-z,0-9

      分割符:空格,非字母数字符号

      例如:”file123”是一个单词,”123file”不是一个单词。file,File和FILE是同一个单词。

      如果两个单词只有最后的数字结尾不同,则认为是同一个单词,例如,windows,windows95和windows7是同一个单词,iPhone4和IPhone5是同一个单词,但是,windows和windows32a是不同的单词,因为他们不是仅有数字结尾不同

      输出按字典顺序,例如,windows95,windows98和windows2000同时出现时,输出windows2000

      单词长度只需要考虑[4, 1024],超出此范围的不用统计。

      c)词组的定义:windows95 good, windows2000 good123,可以算是同一种词组。按照词典顺序输出。三词相同的情形,比如good123 good456 good789,根据定义,则是 good123 good123 这个词组出现了两次。

      两个合法单词之间,出现一个非法字符串,比如:windows2000 abc good123,因为abc按照定义不是单词,因此这个词组其实是windows2000 good123,中间的abc当做分隔符看待。

      good123 good456 good789这种情况,由于这三个单词与good123都是同一个词,最终统计结果是good123 good123这个词组出现了2次。

      两个单词分属两行,也可以直接组成一个词组。统计词组,只看顺序上,是否相邻。

      d) 输入文件名以命令行参数传入。需要遍历整个文件夹时,则要输入文件夹的路径。

      e) 输出文件result.txt

      characters: number

      words: number

      lines: number

      <word>: number

      <word>为文件中真实出现的单词大小写格式,例如,如果文件中只出现了File和file,程序不应当输出FILE,且<word>按字典顺序(基于ASCII)排列,上例中程序应该输出File: 2

      f) 根据命令行参数判断是否为目录

      g) 将所有文件中的词汇,进行统计,最终只输出一个整体的词频统计结果。

    准备

    •  学习c++相关语法,常用对象内容。
    •   VS性能分析,寻找linux下性能分析工具。  
    •   github使用

    代码规范

      1. 宏定义、类型定义、函数之间,都加上空行。

      2. 除了一元运算符,运算符、变量之间加上空格。

      3. 一个类型不要有两个名称。

      4. 命名不要太过冗余。

      6. 指针名不要用p、ptr、pointer这样空泛的名称,是什么就叫什么。

      7. 判断的时候变量名写左边,常量写右边。

      8. 注释写在函数签名上面。

      9. 任何情况下if、while、for代码块都加上花括号。

      10. 类型名用大写,变量名用小写。

    PSP:

    进度规划计划用时实际用时
    理清逻辑思路 60min 60min
    实现文件夹递归遍历 30min

    80min

    1 没有完全实现导致后来出现bug,加上了修改的时间。

    2 linux文件遍历与windows不同。

    统计字符以及行数 30min

    20min

    数目最后仍与助教结果有差异

    统计单词数目 70min

    360min

    使用哈希表后为了按字典顺序输出占用了大量时间

    后来为了优化,更改了逻辑又花了很多时间

    统计词组数目 40min

    30min 

    感觉写完判定单词之后很快

    代码优化 120min

    60min

    原本以为要花很多时间,但是应该是自己水平太差了,根本不知到如何优化

    linux性能分析 80min

    120min

    安装Linux以及性能分析软件花费了许多时间

    测试细节 40min

    60min

    构建例子,撰写报告

    总时间 470min

    790min

    项目所得:

      对于c++使用更为熟练了,对其面向对象的特性有了更深的理解,c++绝对不是c加了个class。

      第一次为了性能优化,从代码结构,数据结构选取,算法选取,一直到每一行代码都绞尽脑汁的权衡,这是之前从来没有过的体验。

      linux下性能分析工具的使用。

      GitHub的使用。

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/zsl96/p/8655314.html
Copyright © 2011-2022 走看看