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
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.
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%Tags und Links c