2012-10-16 12 views
5

मैं अपने प्रोग्राम में खोज फ़ंक्शन के लिए एक सुझाव सुविधा प्राप्त करने का प्रयास कर रहा हूं जैसे कि मैं खोज अनुभाग में जानवा डू टाइप करता हूं और यह आउटपुट आउटपुट नहीं करेगा - क्या आपका मतलब जेन डो? मुझे यकीन नहीं है कि समस्या क्या है, शायद चार/स्ट्रिंग तुलना के साथ कुछ करने के लिए .. मैंने दोनों चरों को तुलना करने के लिए चार प्रकार की तुलना करने की कोशिश की है जैसे char temp -> temp.Contains ... आदि लेकिन एक त्रुटि प्रकट होती है (char इसमें शामिल करने के लिए परिभाषा नहीं है)। इस पर किसी भी मदद से प्यार होगा! 8)चार/स्ट्रिंग तुलना

if (found == false) 
     { 
      Console.WriteLine("\n\nMATCH NOT FOUND"); 
      int charMatch = 0, charCount = 0; 
      string[] checkArray = new string[26]; 
      //construction site ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      for (int controlLoop = 0; controlLoop < contPeople.Length; controlLoop++) 
      { 
       foreach (char i in userContChange) 
       { 
        charCount = charCount + 1; 
       } 
       for (int i = 0; i < userContChange.Length;) 
       { 
        string temp = contPeople[controlLoop].name; 
        string check=Convert.ToString(userContChange[i]); 
        if (temp.Contains(check)) 
        { 
         charMatch = charMatch + 1; 
        } 
       } 
       int half = charCount/2; 
       if (charMatch >= half) 
       { 
        checkArray[controlLoop] = contPeople[controlLoop].name; 
       } 
      } 
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
       Console.WriteLine("Did you mean: "); 
       for (int a = 0; a < checkArray.Length; a++) 
       { 
        Console.WriteLine(checkArray[a]); 
       } 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
+0

आपका प्रश्न बहुत नहीं है स्पष्ट है, आपको किस कोड की समस्या है जिसके साथ आपको परेशानी हो रही है? – Alan

उत्तर

6

एक स्ट्रिंग कई पात्रों से बना है। एक चरित्र एक आदिम है, वैसे ही, इसमें किसी अन्य वस्तु को "शामिल" नहीं किया जाता है। एक स्ट्रिंग मूल रूप से वर्णों की एक सरणी है।

स्ट्रिंग और पात्रों की तुलना के लिए:

char a = 'A'; 
String alan = "Alan"; 
Debug.Assert(alan[0] == a); 

या यदि आप एक एकल अंक स्ट्रिंग है .. मुझे लगता है

char a = 'A'; 
String alan = "A"; 
Debug.Assert(alan == a.ToString()); 

इन सभी का दावा है सत्य हैं

लेकिन, मुख्य कारण मैं आपके प्रश्न पर टिप्पणी करना चाहता था, "क्या आपका मतलब है" सुझाव देने के लिए वैकल्पिक दृष्टिकोण का सुझाव देना है। लेवेनशेटिन दूरी नामक एक एल्गोरिदम है जो एक स्ट्रिंग को दूसरे में परिवर्तित करने के लिए आवश्यक "एकल वर्ण संपादन की संख्या" की गणना करता है। इसका उपयोग इस उपाय के रूप में किया जा सकता है कि करीब दो तार कितने करीब हैं। आप यह देखना चाहते हैं कि यह एल्गोरिदम कैसे काम करता है क्योंकि यह आपकी मदद कर सकता है। Approximate String Matching with k-differences

भी विकिपीडिया लिंक Levenshtein distance

+0

मुझे एल्गोरिदम पर एक नज़र डालेंगी; एस जटिल ओ_ओ दिखता है। मैं आपको बता दूंगा कि यह कैसे जाता है। :) – Quigg15405

+0

एल्गोरिदम वास्तव में बहुत आसान है, शायद देखें कि क्या आप एक बेहतर एप्लेट पा सकते हैं जो आपको चरण-दर-चरण – Alan

0

चार प्रकार .Contains() नहीं हो सकता है, क्योंकि केवल 1 वर्ण मान प्रकार है:

यहाँ एक एप्लेट है कि मैंने पाया जो दर्शाता है।

आपके मामले में (यदि मैं समझता हूं), तो आपको .Equals() या == ऑपरेटर का उपयोग करने की आवश्यकता है।

नोट: स्ट्रिंग सही ढंग से तुलना के लिए, .Equals() उपयोग करते हैं, == ऑपरेटर इस मामले में अच्छा काम नहीं करता क्योंकि String संदर्भ प्रकार है।

इस सहायता की आशा करें!

+0

दिखाता है आप == ऑपरेटर के साथ दो वर्णों की तुलना कर सकते हैं। कुंजी यह है कि एक स्ट्रिंग एक चरित्र के बराबर नहीं हो सकता है। एक मूल रूप से वर्णों की एक सरणी है और दूसरा एक अक्षर, अंक, आदि है। – Alan

+0

बेशक! मैंने स्ट्रिंग की तुलना में केवल == ऑपरेटर को देखा है। चार प्रकार की तुलना == ऑपरेटर से की जा सकती है, लेकिन यह एक मान प्रकार है। सही? –

+0

यह एक मूल्य प्रकार है, हाँ – Alan

0

char प्रकार dosen't Contains() विधि है, लेकिन आप आईआईटी इस तरह उपयोग कर सकते हैं: 'a'.ToString().Contains(...)

एक और आसान तरीका है, तो प्रदर्शन पर विचार नहीं करते,:

 var input = "janw doe"; 
     var people = new string[] { "abc", "123", "jane", "jane doe" }; 

     var found = Array.BinarySearch<string>(people, input);//or use FirstOrDefault(), FindIndex, search engine... 
     if (found < 0)//not found 
     { 
      var i = input.ToArray(); 
      var target = ""; 

      //most similar 
      //target = people.OrderByDescending(p => p.ToArray().Intersect(i).Count()).FirstOrDefault(); 

      //as you code: 
      foreach (var p in people) 
      { 
       var count = p.ToArray().Intersect(i).Count(); 
       if (count > input.Length/2) 
       { 
        target = p; 
        break; 
       } 
      } 

      if (!string.IsNullOrWhiteSpace(target)) 
      { 
       Console.WriteLine(target); 
      } 
     } 
संबंधित मुद्दे