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的使用。

  • 相关阅读:
    阿里云服务器 FTP配置图文教程和添加两个FTP站点
    SAP 用事务码SQVI 做简单报表 .
    公司间联动权限解决方案
    table合并单元格colspan和rowspan .
    js更改input标签的读写属性
    小div在大div中垂直居中,以及div在页面垂直居中
    UI控件(UITextField)
    node基本理念(事件、多线程、进程)
    MyBatis(跨表查询)
    MyBatis(增删改查)
  • 原文地址:https://www.cnblogs.com/zsl96/p/8655314.html
Copyright © 2011-2022 走看看