Tôi đang tìm kiếm một thuật toán đơn giản và nhẹ để so sánh hai chuỗi đơn giản.Thuật toán khác biệt của từ đơn giản
Ví dụ, nếu chúng ta lấy hai chuỗi:
- "The quick brown fox jumps over the lazy dog"
- "The fox nâu bộ làm êm * tumps so với con chó điên"
Nó sẽ báo hiệu cho tôi rằng 2 chữ cái đầu tiên của từ thứ hai là khác nhau, v.v.
Bây giờ tôi có một thuật toán rất đơn giản so sánh các từ:
/// <summary>
/// Make a diff between two strings and returns words indices
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static List<int> Diff(string a, string b)
{
List<int> indices = new List<int>();
string[] asplit = a.Split(' ');
string[] bsplit = b.Split(' ');
for (int i = 0; i < asplit.Length; i++)
{
if (bsplit.Length > i)
{
if (asplit[i].CompareTo(bsplit[i]) != 0)
{
indices.Add(i);
}
}
}
return indices;
}
Vì vậy, điều này sẽ cho tôi biết từ nào (sử dụng phân tách trên các ký tự khoảng trắng) khác nhau.
Tôi đã đọc nhiều chủ đề ở đây về việc triển khai thuật toán phức tạp hoặc sử dụng thư viện hiện có.
Nhưng tôi được đào tạo lại bởi .NET compact framework (WP7) và tôi không wan't cái gì đó có thể so sánh hai tập tin hoặc hai văn bản, tôi chỉ cần một so sánh từ.
Có thư viện hoặc thuật toán nào có thể phù hợp không? Cảm ơn :).
điều gì sẽ xảy ra nếu một từ được chèn vào giữa một trong các câu sao cho nó bị lệch? Nó có nên báo cáo mọi từ tiếp theo khác nhau không? –
Cách tiêu chuẩn để giải quyết vấn đề này là triển khai thuật toán Hậu quả dài nhất. Nó là một thuật toán khá đơn giản. Tôi có một thực hiện JScript ở đây: http://blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspx chuyển nó sang C# còn lại như một bài tập. –
@ James Michael Hare: hãy nói rằng tôi có "con ngựa nhỏ của tôi" và "con ngựa nhỏ ngọt ngào của tôi", nó chỉ nên báo cáo "ngọt". Tôi nghĩ rằng thuật toán quá đơn giản của tôi thất bại cho việc này. – Valryon