代码行数统计算法实现
来源:互联网 发布:百知尚行靠谱吗 编辑:程序博客网 时间:2024/06/06 05:46
在以前一个小小的项目当中使用到了一个小的功能,就是对开发人员每天的编写有效代码行数进行统计,当时,主要是用在C++的项目组。当时,就写了一个统计代码有效行数的算法程序并进行了简单的封装给其它开发人员使用。实现的主要思路是:代码行数 = 总共行数 - 空白行数 - 注释行数。
程序的接口文件CodeCounter.h
#include <cstring>/*定义程序的接口,获取代码,注释,空白以及总共的行数。*/class CodeCounter{public:CodeCounter();~CodeCounter();int getCodeLineNumber();//获取代码行数int getCommentLineNumber();//获取注释行数int getBlankLineNumber();//获取空白行数int getTotalLineNumber();//获取总行数void setPathAndGetLineNumbers(const char *path);//设置要统计文件的路径并且计算统计的行数private:int codeLineNumber;//代码行数int commentLineNumber;//注释行数int blankLineNumber;//空白行数int totalLineNumber;//总行数};
对接口功能的实现文件CodeCounter.cpp 这个文件也是有效代码行数统计的核心代码。
/*对接口的功能实现:获取代码行数 getCodeLineNumber获取注释行数 getCommentLineNumber获取空白行数 getBlankLineNumber获取总行数 getTotalLineNumber设置要统计文件的路径并且计算统计的行数 setPathAndGetLineNumbers*/#include "CodeCounter.h"#include <iostream>#include <stdio.h>#define MAX_SIZE 1024#define ZERO 0char str[MAX_SIZE];CodeCounter::CodeCounter(){//初始化代码,注释,空白行,总行数都为0。codeLineNumber = 0;commentLineNumber = 0;blankLineNumber = 0;totalLineNumber = 0;}CodeCounter::~CodeCounter(){//使用系统的析构函数}/*检查文本字符当中的空白字符并且删除字符*/int CheckAndDeleteBlank(char *str){int len;len = strlen(str);int j = 0;for (int i = 0; i < len; i++){if (str[i] != ' ' && str[i] != '\t') //去掉文本中的空白符{str[j] = str[i];j = j + 1;}}str[j] = '\0'; //补字符的结尾符if (str[0] == '\n'){return ZERO;}else{return j;}}/*检查文本行是否为注释并设置标志位flag = 0 表示不是注释的开头部分flag = 1 表示是注释的开头部分*/int CheckFlag(char *str){int flag = 0;int len = strlen(str);int i = 0;while (str[i] != '\0'){if (str[i + 1] == '\0'){break;}if (str[i] == '/' && str[i + 1] == '*'){flag++;}if (str[i] == '*' && str[i + 1] == '/'){flag = 0;}i++;}if (flag > 0){flag = 1;}return flag;}/*设置要统计文件的路径并且计算统计的行数*/void CodeCounter::setPathAndGetLineNumbers(const char *path){int result;int flag = 0;errno_t err;FILE *fp;if ((err = fopen_s(&fp ,path, "r++")) != 0) //读取指定路径的文件{std::cout << "Thi file was not openned\n";exit(-1);}while (fgets(str, MAX_SIZE, fp)){result = CheckAndDeleteBlank(str);//去掉文本一行字符当中的空白符if (flag == 0) //开始统计行数{if (result == 0){blankLineNumber++;}if (str[0] == '/' && str[1] == '/'){commentLineNumber++;}if (str[0] == '/' && str[1] == '*'){commentLineNumber++;flag = CheckFlag(str);}if (str[0] != '/') //{flag = CheckFlag(str);}}else{commentLineNumber++;if (strstr(str, "*/") != NULL && CheckFlag(str) == 0){flag = 0;}}totalLineNumber++;}fclose(fp); //关闭文件codeLineNumber = totalLineNumber - blankLineNumber - commentLineNumber; //代码行数 = 总行数 - 空白行数 - 注释行数}int CodeCounter::getCodeLineNumber(){return codeLineNumber;}int CodeCounter::getBlankLineNumber(){return blankLineNumber;}int CodeCounter::getCommentLineNumber(){return commentLineNumber;}int CodeCounter::getTotalLineNumber(){return totalLineNumber;}
在主程序当中进行调用测试的代码文件 main.cpp
#include <iostream>#include "CodeCounter.h"using namespace std;int main(void){CodeCounter *pcc = new CodeCounter();pcc->setPathAndGetLineNumbers("C:\\xiyoulele.cpp");int codeLineNum = pcc->getCodeLineNumber();int commentLineNum = pcc->getCommentLineNumber();int blankLineNum = pcc->getBlankLineNumber();int totalLineNum = pcc->getTotalLineNumber();cout << "========== 显示统计结果 ==========" << endl;cout << "代码行数:" << codeLineNum << endl << endl;cout << "注释行数:" << commentLineNum << endl << endl;cout << "空白行数:" << blankLineNum << endl << endl;cout << "总共行数:" << totalLineNum << endl << endl;return 0;}
程序当中使用的测试cpp文件内容:
程序运行的结果:
- 代码行数统计算法实现
- java实现统计代码行数
- 多线程实现代码行数统计
- shell实现代码行数统计
- C语言代码行数统计bash实现
- 统计代码行数(python实现)
- 统计代码行数工具 用golang实现
- 统计代码的行数 c实现
- 一行shell命令实现代码行数统计
- Python实现代码行数统计工具
- python 统计代码行数,注释行数的简单实现
- 统计代码行数代码
- 字符串处理算法(五)多线程实现代码行数统计。[风林火山]
- 代码行数统计类
- 代码行数统计器
- 统计代码行数源码
- 统计代码行数
- 统计代码行数源码
- 查找含有某一字符串的文件
- 指针形参,C编程必须懂的东西
- ASP.NET MVC3学习总结(一)ASP.NET MVC介绍
- error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 再次换博客,地址http://iwood.co.nr
- 代码行数统计算法实现
- OGNL极其用法
- 提取SAP standard error message
- 小孩家庭性教育从6点入手
- 几天面试的感触
- 图解Ubuntu 12.04详细安装Mysql
- strutw
- 技术人员,你拿什么拯救你的生活----一个牛人的故事
- JSP提供了九个内部对象详解