2017-04-14 6 views
1

Ich helfe einem Freund, eine Funktion zu schreiben, die eine Zeichenfolge von Leerzeichen-getrennten Wörtern nimmt und die längste zurückgibt, aber mein Code fehlschlägt 2 aus den 3 Tests, die es zu überprüfen.Funktion schlägt 2 von 3 Tests fehl

Dies sind die Tests:

describe("test for longest function functionality", function() { 
    it("should return correct output for normal strings", function() { 
    expect(longest("A")).toEqual("A"); 
    expect(longest("I love Avatar")).toEqual("Avatar"); 
    expect(longest("The stupidities of youth")).toEqual("stupidities"); 
    }); 

    it("should return correct output for gibberish", function() { 
    expect(longest("hgdydrxtfEq Rradsc tstsa taeWwwec fgdd")).toEqual("hgdydrxtfEq"); 
    }); 

    it("should work for sentences with numbers", function() { 
    expect(longest("This is a sentence with a number 7685838788")).toEqual("7685838788"); 
    }); 
}); 

Dies ist meine Lösung so weit:

function longest(str) { 
    var longestStart = 0; 
    var longestEnd = 0; 
    var current = 0; 
    var currentLength = 0; 
    while (current < str.length) { 
    if (str.charAt(current) == ' ') { 
     if (currentLength > (longestEnd - longestStart)) { 
     longestStart = (current - currentLength); 
     longestEnd = current; 
     } 
     currentLength = 0; 
    } else { 
     currentLength++; 
    } 
    current++; 
    } 
    return str.substring(longestStart, longestEnd); 
} 
+1

Bitte zeigen Sie, welche Ihrer Tests nicht besteht. –

+0

@TatsuyukiIshi Test 1 und 3, um spezifisch zu sein – Wafaw123

+0

Total Specs: 3 Totalausfälle: 2 1. Test für längste Funktionsfunktionalität sollte korrekte Ausgabe für normale Strings liefern Erwartet '' gleich 'A'. Erwartete 'Liebe', 'Avatar' gleich zu sein. 2. Test für die längste Funktionsfunktionalität sollte für Sätze mit Zahlen funktionieren Erwarteter "Satz" gleich "7685838788". – Wafaw123

Antwort

0

Sie Verarbeitung nicht nach der Zeichenfolge endet. Versuchen Sie, diesen Code auch am Ende hinzuzufügen:

if (currentLength > (longestEnd - longestStart)) { 
    longestStart = (current - currentLength); 
    longestEnd = current; 
} 

Ihr Code ist nicht der einfachste; Sie sollten String.prototype.split() verwenden, um den Code zu erreichen, der am einfachsten zu verstehen ist.

1

Persönlich würde ich dies tun, indem eine Funktion wie so mit:

function longestSubstring(stringToSplit) { 
 
    var arrayOfStrings = stringToSplit.split(" "); 
 

 
    var longestString = arrayOfStrings[0]; 
 

 
    for (var i = 0; i < arrayOfStrings.length; i++) { 
 
    if (longestString.length < arrayOfStrings[i].length) { 
 
     longestString = arrayOfStrings[i]; 
 
    } 
 
    } 
 

 
    console.log(longestString); 
 
} 
 

 
longestSubstring("Hello my friend"); 
 
longestSubstring("1 12 123 1234 12345"); 
 
longestSubstring("aaaaaaah hello yell");

+0

Ihr Code besteht keinen der Tests, aber ich lief das Code-Snippet und es schien gut zu funktionieren. Beim Test mit Zahlen könnte die Zeichenfolge ein Satz mit Zahlen sein, zB Der Junge hat 12345 Spielzeuge. es sollte 12345 als das richtige zurückgeben und der Test mit Kauderwelsch zB jcads sfef rfgwrffrg sollte es rfgwrffrg als das richtige zurückgeben 1. @ thedudeabides – Wafaw123

+0

@ Wafaw123 der Code besteht keinen der Tests, weil ich nichts zurückgebe. Wenn Sie möchten, müssen Sie einfach die console.log in der Funktion anpassen, um eine Rückgabeanweisung zu sein. – henry

+0

@ Wafaw123 Dies ist, weil Karma und Jasmin, die es scheint, die Sie verwenden, um die Tests auszuführen, erwartet, dass die Funktion die längste Zeichenfolge zurückgibt, aber es nicht seit nichts zurückgegeben wird. Wenn es Teile des Codes gibt, die Sie nicht verstehen, fragen Sie bitte, wie ich mehr als glücklich wäre, im Detail zu erklären, was passiert. – henry