C # entspricht C ++ std :: string find_first_not_of und find_last_not_of

8

IndexOf , IndexOfAny und LastIndexOf , LastIndexOfAny scheinen das nicht zu tun (oder vielleicht tun sie das). Ich suche nach dem Equalent von% code% und find_first_not_of von std :: string. Ich denke darüber nach, eine Erweiterungsklasse zu erstellen, aber ich bin mir nicht sicher, ob C # diese Funktionalität bereits bietet.

    
Marlon 21.12.2010, 10:16
quelle

3 Antworten

11
%Vor%

Oder, wenn Sie einige Nicht-LINQ-Erweiterungsmethoden bevorzugen. Diese sollten eine etwas bessere Leistung haben, besonders für FindLastNotOf :

%Vor%

(Möglicherweise erhalten Sie eine bessere Leistung - sowohl in der LINQ- als auch in der nicht-LINQ-Version), wenn Sie chars in eine HashSet<char> oder vielleicht sogar eine einfache% -Zahl konvertieren co_de% array: Sie müssten einen Benchmark erstellen, um herauszufinden, obwohl jeder Unterschied wahrscheinlich vernachlässigbar ist, es sei denn char[] wird ziemlich groß.)

    
LukeH 21.12.2010, 11:50
quelle
4

Wenn die Verwendung von LINQ akzeptabel ist, können Sie die First () und Last () Methoden mit dem entsprechenden Prädikat.

Wenn Sie beispielsweise die ersten und letzten Zeichen, die keine Vokale sind, möchten:

%Vor%

BEARBEITEN: Obiges gibt die Zeichen zurück, nicht ihre Indizes. Um dies zu tun, können Sie die Indizes mit der Select () -Methode projizieren, aber Dinge wird haarig, da wir -1 zurückgeben müssen, wenn kein Zeichen übereinstimmt:

%Vor%

Alternativ ist hier eine weniger komplizierte Lösung basierend auf @ abatiishchevs Antwort:

%Vor%     
Frédéric Hamidi 21.12.2010 10:30
quelle
0

Hier ist eine Regex-Lösung.

%Vor%     
Jonas Elfström 21.12.2010 12:04
quelle

Tags und Links