我有一個程序,計算兩個程序的代碼行(不包括註釋,大括號,空格等),然後比較它們。它將一個程序的所有行放在一個List中,另一個程序的行放在另一個List中。然後它刪除所有在兩者之間相同的行。一個列表是所有添加到程序1中的行以獲得程序2,另一個列表是從程序1中刪除的所有行以獲得程序2.如何計算修改後的代碼行數?
現在我需要一種方法來檢測程序中有多少行代碼1已經被修改以獲得程序2.我找到了一個Levenshtein距離的算法,看起來好像會起作用。我只需要將距離與字符串的長度進行比較以獲得百分比變化,我需要爲閾值提供一個很好的值。
但是我的問題是這樣的:我怎麼知道哪兩個字符串比較Levenshtein距離?我最好的猜測是有一個嵌套的for循環,並通過一個程序在另一個程序中的每一行循環一次,以比較每條線與其他每條線,尋找滿足差異閾值的距離。但是,這似乎效率很低。有沒有其他的方法來做到這一點?
我應該添加這是一個軟件工程類。這在技術上是家庭作業,但我們可以使用我們需要的任何資源。雖然我只是在尋找算法,但我會告訴你我正在使用C#。
難道你的答案僅僅是兩份名單的總和?列表1中剩下的內容被刪除,並且列表2中的內容被添加。我錯過了什麼嗎?我不知道,定義「代碼行」。 –
一行代碼是具有分號(並且不是註釋)的任何行,以及其他一些行,如方法標題和包含保留字的行,例如while,try等。修改的行是程序中的一行2,它與程序1中的一條線非常相似但不完全相同。 – JDCAce