Whitespace von einer String an Ort und Stelle entfernen?

8

Ich habe das in einer "Liste von Interviewfragen" gesehen. Hab mich gewundert.

Nicht auf Whitespace beschränkt, natürlich leicht verallgemeinert auf "Entfernen eines bestimmten Zeichens aus einer Zeichenkette, an Ort und Stelle".

Meine Lösung ist:

%Vor%

Ich bezweifle, dass es einen effizienteren gibt, aber gibt es eine elegantere Lösung?

edit : total vergessen Ich habe strlen drin gelassen, es ist definitiv nicht effizient

    
Steven Lu 15.10.2011, 01:18
quelle

3 Antworten

10

Zunächst ist i<strlen(str) immer ein ineffizientes Idiom für die Schleife über einen String. Die korrekte Schleifenbedingung ist einfach str[i] , d. H. Schleife, bis str[i] der Nullabschluss ist.

Damit ist hier der einfachste / prägnanteste Algorithmus, den ich kenne:

%Vor%

Hinweis: Meine Lösung bezieht sich auf die Frage, die im Betreff (Whitespace) geschrieben wurde, im Gegensatz zum Körper (bestimmtes Zeichen). Sie können es bei Bedarf leicht anpassen.

    
R.. 15.10.2011, 01:27
quelle
17

C hat keine Standardargumente, und wenn Sie in C ++ programmieren, sollten Sie std::string und remove_if von <algorithm> verwenden.

Sie können definitiv dies effizienter machen, indem Sie die Aufrufe von strlen eliminieren, die einen O (N) Algorithmus in ein O (N 2 ) verwandeln Algorithmus, und sind völlig unnötig - Sie scannen die Zeichenfolge sowieso, also suchen Sie einfach selbst nach der NUL.

Sie können dies auch C-idiomatisch machen, indem Sie anstelle der Array-Indizierung zwei Zeiger verwenden. Ich würde es so machen:

%Vor%     
zwol 15.10.2011 01:27
quelle
-1
%Vor%     
frank 20.10.2011 05:15
quelle

Tags und Links