2010-07-27 24 views
22

İki dizeyi C# ile nasıl karşılaştırabilirim? örneğinİki dizeyi karşılaştırın ve farkı alın

:

String1 i bir araba

dize2 vardır: i bmw

sonuç araban yeni: Yeni, bmw

+1

biz kabul edebilir bunu tarafından bölünmüş istiyorum kelime sınırı? – ChaosPandion

+2

"Yeni" ile "araba" arasındaki ve "araba" ile "bmw" arasındaki boşluklardan ne haber? Kelimelerin birinin "araba" dan önce ve diğerinin peşinde olduğunu bilmek ister misiniz? “Yeni bir arabam var” ve “yeni bir arabam var” arasındaki farktan ne haber? Burada "yeni" bir fark var mı? Silmelere ne dersin? "Yeni bir arabam var" vs "Ben bir arabam var"? "Yeni" nin + bir alanın kaldırıldığını bilmek ister misiniz? Kısacası, bize bazı varsayımlarınızı veya sorunlarınızla ilgili sınırlarınızı söylemeniz gerekir. –

+0

@Lasse V. Karlsenno, bu durumda fark "o", " @ ChaosPandion, sanırım evet: p. Bunu nasıl yapabilirim bilmiyorum: S – Luis

cevap

23

, kolay bağlantı emin geniş seti sol tarafındadır Except (Bunu başarmak için saf Linq yolu var olup olmadığından emin değil):

static void Main(string[] args) 
    { 
     string s1 = "i have a car a car"; 
     string s2 = "i have a new car bmw"; 

     List<string> diff; 
     IEnumerable<string> set1 = s1.Split(' ').Distinct(); 
     IEnumerable<string> set2 = s2.Split(' ').Distinct(); 

     if (set2.Count() > set1.Count()) 
     { 
      diff = set2.Except(set1).ToList(); 
     } 
     else 
     { 
      diff = set1.Except(set2).ToList(); 
     } 
    } 
+0

sol tarafa daha küçük ayar yapmazsanız, farklı argümanların olması gerektiğini söyleyin. Ve şöyle diyor: Hata 'System.Collections.Generic.IEnumerable ' 'Except' için bir tanım içermiyor ve 'System.Collections.Generic' türünde bir ilk bağımsız değişken kabul eden 'Except' uzantısı dışında.IEnumerable 'bulundu (kullanma yönergesi veya derleme başvurusu eksik misiniz?) – Luis

+0

.NET 3.5 benim için çalışır mı? .NET 2.0 kullanıyor musunuz? –

+0

belki bazı referanslar. Hangi referansın var? VS 2008 – Luis

5

Bunun için bir fark algoritması kullanabilirsiniz görev. "An O(ND) Difference Algorithm and Its Variations" kağıdı, bu görevi gerçekleştirmek için oldukça güçlü bir algoritmayı açıklamaktadır. C# 'da bir uygulama için "An O(ND) Difference Algorithm for C#"' a bakabilirsiniz, ancak IMHO, makaleye bir göz atmak ve algoritmanın nasıl çalıştığına bakmak istediğinizde kendiniz için uygulamak için daha ilginçtir.

8

Sorunuz yanıtlandıktan (Bu biraz belirsiz.) bu işe yaramalı. senin dosyasının en üstünde

var first = string1.Split(' '); 
var second = string2.Split(' '); 
var primary = first.Length > second.Length ? first : second; 
var secondary = primary == second ? first : second; 
var difference = primary.Except(secondary).ToArray(); 

eklemek emin olun:

using System.Linq; 
+0

'un farkına varmaz, bu iki dizeyi aynı yapar: "bir arabam var" ve "araba sahibiyim". Ama evet, OP ile tamam olup olmadığını belirsiz. –

+0

bu tekrarlarla çalışır? örneğin "bir arabam var" vs "bir arabam var" – Luis

+0

hiçbir sonuç döndürürse sol tarafta –

İlgili konular