Ich muss überprüfen, ob ein Std: String mit "xyz" beginnt. Wie mache ich das, ohne den ganzen String zu durchsuchen oder temporäre Strings mit substr() zu erzeugen.Std :: String-Vergleich (überprüfen, ob String mit einem anderen String beginnt)
Antwort
I Methode vergleichen würde verwenden zu kopieren:
std::string s("xyzblahblah");
std::string t("xyz")
if (s.compare(0, t.length(), t) == 0)
{
// ok
}
Ich fühle, dass ich Ihre Frage nicht vollständig verstehe. Es sieht so aus, als ob es trivial sein sollte:
s[0]=='x' && s[1]=='y' && s[2]=='z'
Dies sieht nur (höchstens) die ersten drei Zeichen. Die Verallgemeinerung für eine Zeichenfolge, die zum Zeitpunkt der Kompilierung unbekannt ist, würde Sie benötigen die oben mit einer Schleife zu ersetzen:
// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
if (s[i]!=t[i])
return false;
}
Blick auf die String Algo Bibliothek Boost, die eine Reihe von nützlichen Funktionen, wie starts_with hat, istart_with (Groß- und Kleinschreibung), etc. Wenn Sie nur einen Teil der Boost-Bibliotheken in Ihrem Projekt verwenden möchten, dann können Sie bcp verwenden nur benötigten Dateien
Ein Ansatz das könnte mehr drin sein Mit dem Geist der Standard-Bibliothek zu bleiben würde Ihren eigenen begins_with-Algorithmus definieren.
#include <algorithm>
using namespace std;
template<class TContainer>
bool begins_with(const TContainer& input, const TContainer& match)
{
return input.size() >= match.size()
&& equal(match.begin(), match.end(), input.begin());
}
Dies stellt eine einfachere Schnittstelle zu Client-Code und ist kompatibel mit den meisten Standard Library Containern.
- 1. KSH überprüfen, ob der String mit Teilzeichenfolge beginnt
- 2. hasClass() beginnt mit String
- 3. Ermitteln, ob ein String mit einem Großbuchstaben in Perl beginnt
- 4. Überprüfen Sie, ob ein bestimmtes Element in dem Array beginnt mit einem String
- 5. Sehen Sie, ob ein String mit Leerzeichen in Java beginnt
- 6. Bash: Wie überprüft man, ob ein String mit '#' beginnt?
- 7. Überprüfen Sie, ob String palindrom
- 8. Oracle 11g: Braucht das längste passende String zu erhalten, die mit einem anderen String beginnt
- 9. SQL Überprüfen Sie, ob Spalte String einer anderen Spalte ist
- 10. Unterschied zwischen Std: String und Std :: String
- 11. Ausgabe mit Std :: String
- 12. std :: string mit einem benutzerdefinierten Zuweiser
- 13. Iterator-Invalidierung durch `std :: string :: begin()`/`std :: string :: end()`?
- 14. Überprüfen Sie, ob ein String beginnt mit einer Zahl in PHP
- 15. Wie überprüft man, ob eine Zeichenfolge mit einem Palindrom beginnt?
- 16. Wenn Zelle beginnt mit Text String ... Formel
- 17. mit std :: find_if mit std :: string
- 18. Mit sprintf mit std :: string in C++
- 19. Sequelize query string prifix/beginnt mit
- 20. überprüfen, ob String einen Zeilenumbruch enthält
- 21. Überprüfen Sie, ob String ist ein Satzzeichen
- 22. Überprüfen, ob String Teilstrings in Clojure enthält
- 23. überprüfen, ob Textbox enthalten String oder nicht
- 24. Überprüfen Sie, ob String/Record in Datatable
- 25. ansible: überprüfen, ob die Variable gleich String
- 26. Überprüfen Sie, ob String (9 Stellen) dann
- 27. Überprüfen, ob der String ein Leerzeichen hat
- 28. std :: string in einem Multi-Thread-Programms
- 29. Bash: Echo-String, der mit "-" beginnt
- 30. String-Inhalt mit Javascript überprüfen
Ich habe vergessen zu vergleichen - das ist die beste Methode, aber es gibt keine Notwendigkeit, c_str (0, um eine Zeichenfolge zu erhalten –
Sie können String s ("xyz") == "xyz" auch. :) – Skurmedel
Neil, du hast absolut recht, ich redigiere die Antwort und entferne c_str() call – Wacek