【发布时间】:2013-11-03 16:09:34
【问题描述】:
我有一个程序计算两个程序的代码行数(不包括 cmets、大括号、空格等),然后比较它们。它将一个程序的所有行放在一个列表中,将另一个程序的行放在另一个列表中。然后它会删除两者之间相同的所有行。一个 List 是添加到程序 1 以获取程序 2 的所有行,另一个 List 是从程序 1 中删除的所有行以获取程序 2。
现在我需要一种方法来检测程序 1 中的多少行代码已被修改以获取程序 2。我找到了 Levenshtein 距离的算法,它似乎可以工作。我只需要将距离与字符串的长度进行比较即可获得百分比变化,并且我需要为阈值提供一个合适的值。
但是我的问题是:我怎么知道要比较哪两个字符串来比较 Levenshtein 距离?我最好的猜测是有一个嵌套的 for 循环,并为另一个程序中的每一行循环一次程序,以将每一行与其他每一行进行比较,以寻找满足我的差异阈值的距离。但是,这似乎非常低效。有没有其他方法可以做到这一点?
我应该添加这是针对软件工程课程的。这在技术上是家庭作业,但我们可以使用我们需要的任何资源。虽然我只是在寻找一种算法,但我会告诉你我正在使用 C#。
【问题讨论】:
-
你的答案不就是两个列表的总和吗?清单 1 中剩余的内容已删除,清单 2 中剩余的内容已添加。我错过了什么吗?我不知道,定义“代码行”。
-
一行代码是任何带有分号(并且不是注释)的行,以及其他一些行,如方法头和包含保留字(如 for、while、try 等)的行。修改后的行是程序 2 中与程序 1 中的行非常相似但不相同的行。
标签: c# levenshtein-distance lines-of-code