18 Stimmen

Effiziente Methode zum Abschneiden von Strings auf Länge N

Angenommen, ich habe zum Beispiel std::string mit einem UNIX-ähnlichen Pfad zu einer Datei:

string path("/first/second/blah/myfile");

Angenommen, ich möchte nun dateibezogene Informationen wegwerfen und den Pfad zum Ordner "blah" aus dieser Zeichenfolge abrufen. Gibt es einen effizienten (mit "effizient" meine ich "ohne Kopien") Weg, diese Zeichenkette so zu kürzen, dass sie Folgendes enthält "/first/second/blah" nur?

Vielen Dank im Voraus.

34voto

Jon Punkte 411383

Wenn N bekannt ist, können Sie mit

path.erase(N, std::string::npos);

Wenn N nicht bekannt ist und Sie es finden wollen, können Sie eine der Suchfunktionen verwenden. In diesem Fall wollen Sie den letzten Schrägstrich finden, also können Sie rfind o find_last_of :

path.erase(path.rfind('/'), std::string::npos);
path.erase(path.find_last_of('/'), std::string::npos);

Es gibt sogar eine Variante davon, die auf Iteratoren basiert:

path.erase (path.begin() + path.rfind('/'), path.end());

Wenn Sie jedoch beruflich Pfade manipulieren wollen, sollten Sie besser eine Bibliothek verwenden, die für diese Aufgabe entwickelt wurde, wie z.B. Boost-Dateisystem .

4voto

Kai Petzke Punkte 1419

Während die akzeptierte Antwort mit Sicherheit funktioniert, ist der effizienteste Weg, das Ende einer Zeichenkette wegzuwerfen, der Aufruf der resize Methode, in Ihrem Fall einfach:

path.resize(N);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X