前阵子去面试,对方出了一个综合测试题,完成一个代码统计工具,分享出来,看其他人是否有类似需求。
大致需求如下:
设计一个程序:使用多线程,统计项目程序源代码行数;源代码是可以编译通过的合法的代码,统计其物理总行数、其中的空行行数、其中含有有效代码的行数、其中含有注释内容的行数。(建议编写命令行程序,不要使用正则表达式;要求自己独立完成答题,如果代码框架能更容易的扩展到支持多种语言的源代码行数统计,将获得更高的评价。)
小伙伴们,当你看到这个题目时,你会如何分析,如何设计你的实现呢?
以下对于代码的的行的统计的核心部分进行分析:
以C#为例,在一个代码文件中,存在空行、注释行、注释块以及混合等情况,如下:
public static void TestFunc()
{
//上面的一行是一个空行,本行是一个注释行
int nFlag = 0;
//上面的一行是一个有效果代码行
string strTest = "这是一个字符串,其中的注释不起作用//无用的注释行,/*无用的注释块*/";
/* 这是一个代码注释块
其中的行注释及字符串均无效
"无效的字符串"
//无效的行注释
*/
strTest = string.Format("{0}{1}", /*块注释*/"字符串", /* //块注释中行注释*/nFlag); //这是一行有效果代码与注释混合的
}
这里在实现中需要考虑的细节主要有如下几个方面:
1. 在C#中,存在行注释与块注释,行注释以 // 开始,仅在本行有效;块注释以 /* 开始,以*/结束,可以跨行
2. 块注释可以跨行,并且在注释块中的字符串与行注释是无效的
3. 字符串也可以跨行,并且在字符串中的块注释与行注释是无效的
4. 处于行注释中的字符串与注释块是无效的
5. 当一行代码中存在多处间歇的块注释与行注释时,同时要记录为有效行及注释行,并且注释行这里只能算一行
另外,其他的如代码的复用及扩展,多线程的同步等,不在此文中讨论,具体看代码吧。
http://download.youkuaiyun.com/detail/tragicguy/8867449
欢迎有空的朋友一起讨论,也请有兴趣的朋友下下来看看,帮忙给打打分,哪些不足的地方,帮忙提点意见。