Ich muss überprüfen, ob ein std: string mit "xyz" beginnt. Wie mache ich das, ohne die gesamte Zeichenfolge zu durchsuchen oder temporäre Zeichenfolgen mit substr () zu erstellen?
90
Ich würde die Vergleichsmethode verwenden:
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
Ein Ansatz, der eher dem Geist der Standardbibliothek entspricht, besteht darin, Ihren eigenen Algorithmus "begin_with" zu definieren.
Dies bietet eine einfachere Schnittstelle zum Clientcode und ist mit den meisten Standardbibliothekscontainern kompatibel.
quelle
Schauen Sie sich die String Algo- Bibliothek von Boost an , die eine Reihe nützlicher Funktionen enthält, z. B. Starts_mit, Istart_with (ohne Berücksichtigung der Groß- und Kleinschreibung) usw. Wenn Sie nur einen Teil der Boost-Bibliotheken in Ihrem Projekt verwenden möchten, können Sie das Dienstprogramm bcp zum Kopieren verwenden nur benötigte Dateien
quelle
Es scheint, dass sich std :: string :: launch_with in C ++ 20 befindet, während std :: string :: find verwendet werden kann
quelle
std::string::compare
da es einfach ist zu überprüfen, ob die Zeichenfolge mit einem Literal beginnt, ohne das Literal selbst zu wiederholen, um seine Größe zu ermitteln. Und danke, dass Sie auf die direkte C ++ 20-Lösung hingewiesen haben.Ich habe das Gefühl, dass ich Ihre Frage nicht vollständig verstehe. Es sieht so aus, als ob es trivial sein sollte:
Dies betrifft nur (höchstens) die ersten drei Zeichen. Die Verallgemeinerung für eine Zeichenfolge, die zur Kompilierungszeit unbekannt ist, würde erfordern, dass Sie die oben genannten durch eine Schleife ersetzen:
quelle
t
.