2011-11-05 15 views
9

मेरे पास दो तार हैं। स्ट्रिंग ए: "त्वरित ब्राउन लोमड़ी" स्ट्रिंग बी: "आलसी कुत्ते पर त्वरित भूरे रंग का लोमड़ी कूदता है।"जावास्क्रिप्ट तारों की तुलना करें और अंत अंतर प्राप्त करें

स्ट्रिंग बी में हमेशा स्ट्रिंग ए वर्बैटिम होगा। कभी भी "त्वरित काला लोमड़ी" या "त्वरित और तेज़ भूरे रंग का लोमड़ी" नहीं होगा।

अंतर के "स्ट्रिंग सी" को "आलसी कुत्ते पर कूदता" कैसे मिलता है?

+1

गृहकार्य? वैसे भी, एक आसान तरीका एक लम्बाई चर (इसे 'एल' या कुछ कहते हैं) से शुरू करना है और एक लूप चलाता है जो देखता है कि 'strA.substring (0, l) == strB.substring (0, l)' इसे तब तक नहीं नहीं करता है। फिर, 'strB.substring (एल); 'लौटें। – Alxandr

+1

कृपया जो भी आपने अभी तक प्रयास किया है उसे पोस्ट करें। –

+10

'अंतरस्ट्रिंग = string2.replace (string1," "); 'o_o? –

उत्तर

6

आपको प्रत्येक शब्द को दूसरे शब्द को पार करने की आवश्यकता है।

var s1 = "The quick brown fox", 
    s2 = "The quick brown fox jumped over the fence", 
    string1 = new Array(), 
    string2 = new Array(), 
    diff = new Array(), 
    longString; 

string1 = s1.split(" "); 
string2 = s2.split(" "); 

if(s1.length > s2.length) 
{ 
    longString = string1; 
} 
else 
{ 
    longString = string2; 
} 

for(x = 0; x < longString.length; x++) 
{ 
    if(string1[x] != string2[x]) 
    { 
     diff.push(string2[x]); 
    } 
} 

document.write("The difference in the strings is " + diff.join(" ")); 
+2

देखें "स्ट्रिंग बी में हमेशा स्ट्रिंग ए वर्बैटिम होगा" का अर्थ है "शब्द द्वारा शब्द की जांच न करें" – Triptych

+0

क्या यह हमेशा एक एक्सटेंशन होगा, या स्ट्रिंग बी – comu

+0

में कहीं भी स्ट्रिंग कर सकता है। आपने प्रश्न का गलत व्याख्या किया है। आपके उत्तर में एस 1 और एस 2 गलत होगा क्योंकि एस 2 में एस 1 नहीं है। –

9

नीचे मूल उदाहरण देखें।
इसे आसानी से विभिन्न व्यवहारों के लिए संशोधित/विस्तारित किया जा सकता है। एक समारोह के रूप

var string_a = document.getElementById('string_a').innerHTML, 
 
    string_b = document.getElementById('string_b').innerHTML, 
 
    first_occurance = string_b.indexOf(string_a); 
 

 
if(first_occurance == -1) 
 
{ 
 
    alert('Search string Not found'); 
 
} 
 
else 
 
{ 
 
    string_a_length = string_a.length; 
 

 
    if(first_occurance == 0) 
 
    { 
 
    new_string = string_b.substring(string_a_length); 
 
    } 
 
    else 
 
    { 
 
    new_string = string_b.substring(0, first_occurance); 
 
    new_string += string_b.substring(first_occurance + string_a_length); 
 
    } 
 
    
 
    document.getElementById('diff').innerHTML = new_string; 
 
}
<p>String A: <span id="string_a">The quick brown fox</span></p> 
 
<p>String B: <span id="string_b">The quick brown fox jumps over the lazy dog</span></p> 
 
<hr/> 
 
<p>Difference: <span id="diff"></span></p>

+1

मैं एक कंप्यूटर विज्ञान शिक्षक (या, अमेरिका में, एक 'टीए') होता था। यह एकमात्र उत्तर होगा जो मैं पूर्ण अंक प्रदान करता हूं। यह स्वीकार्य उत्तर होना चाहिए। –

+0

@MichaelScheper मैं सहमत हूं, यह स्वीकार्य उत्तर होना चाहिए, मैंने बेहतर पठनीयता के लिए स्वरूपित किया है और रननेबल कोड स्निपेट – doz87

+1

में बदल गया है, एक अच्छा, @ दर्जन! आगे के सुधार के लिए सुझाव: समानता ऑपरेटर के बजाय पहचान ऑपरेटर का उपयोग करें http://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons और camelCase परिवर्तनीय नाम with_underscores http://www.w3schools.com/js/js_conventions.asp लेकिन इन मुद्दों में से कोई भी इस जवाब की शुद्धता और न ही उपयोगिता को प्रभावित करता है। –

7

comu का जवाब ...

function compareString(s1, s2, splitChar){ 
    if (typeof splitChar == "undefined"){ 
     splitChar = " "; 
    } 
    var string1 = new Array(); 
    var string2 = new Array(); 

    string1 = s1.split(splitChar); 
    string2 = s2.split(splitChar); 
    var diff = new Array(); 

    if(s1.length>s2.length){ 
     var long = string1; 
    } 
    else { 
     var long = string2; 
    } 
    for(x=0;x<long.length;x++){ 
     if(string1[x]!=string2[x]){ 
      diff.push(string2[x]); 
     } 
    } 

    return diff;  
} 
compareString("?Yo=dude", "?Yo=Dude&do=roby", "&").join('\n'); 
compareString("?Yo=Dude", "?Yo=Dude&do=roby", "&").join('\n'); 

नोट: इस सवाल का जवाब अतिरिक्त क्वेरी पैरामीटर को खोजने का मुद्दा (एक और क्वेरी स्ट्रिंग के आधार पर) को हल करती है, और ओपी के लिए एक सही जवाब नहीं है।

+1

यह काफी अतिरंजित समाधान है !! ~ घोस्ट-मैन का समाधान कम से कम परिमाण का एक आदेश अधिक कुशल है! http: // stackoverflow।कॉम/ए/8024608/1450294 –

+2

यह एक उचित टिप्पणी है @ माइकल मैंने मूल प्रश्न का उत्तर नहीं दिया है, लेकिन उस समय की समस्या का समाधान पोस्ट किया था। मुझे लगता है कि मैंने यह किया होगा क्योंकि यह समस्या थी जिसे मैं हल करने की कोशिश कर रहा था और यह कॉमू का जवाब था जिसने मेरी मदद की, इसलिए मैंने जो कोड इस्तेमाल किया, मैंने पोस्ट किया। मैं यह जवाब देने के लिए अपना उत्तर अपडेट करूंगा कि यह वास्तव में प्रश्न का उत्तर नहीं देता है। – chim

+2

भूत आदमी का जवाब स्वीकार्य उत्तर होना चाहिए। – chim

1

तारों के बीच अंतर देखने के लिए एक अद्भुत एपीआई के लिए इस साइट को देखें: google-diff-match-patch हालांकि आपको अपनी आवश्यकता के अनुसार यूआई की जांच करने की आवश्यकता हो सकती है।

संबंधित मुद्दे