Ich habe eine Zeichenfolge, die mit vielen Leerzeichen beginnt. Wenn ich die Position des ersten Zeichens herausfinden möchte, das kein Leerzeichen ist, wie würde ich das tun?So finden Sie das erste Zeichen in einer C++ - Zeichenfolge
Antwort
Siehe std::string::find_first_not_of
.
Um den Position (Index) der ersten Nicht-Raumzeichen zu finden:
str.find_first_not_of(' ');
in die Position (Index) der ersten nicht-leeren Zeichen zu finden:
str.find_first_not_of(" \t\r\n");
Er gibt str.npos
zurück, wenn str
leer ist oder vollständig aus Leerzeichen besteht.
können Sie find_first_not_of
verwenden die säumige führende Leerzeichen zu trimmen:
str.erase(0, str.find_first_not_of(" \t\r\n"));
Wenn Sie wollen, welche Zeichen nicht hart codieren zählen als Rohlinge (zB ein Gebietsschema verwenden) Sie können nach wie vor Gebrauch machen von isspace
und find_if
in mehr oder weniger die Art und Weise ursprünglich von sbi, aber der Pflege vorgeschlagen isspace
, zum Beispiel zu negieren:
string::iterator it_first_nonspace = find_if(str.begin(), str.end(), not1(isspace));
// e.g. number of blank characters to skip
size_t chars_to_skip = it_first_nonspace - str.begin();
// e.g. trim leading blanks
str.erase(str.begin(), it_first_nonspace);
Ich habe nur eine Frage: Brauchen Sie eigentlich die zusätzlichen Leerzeichen?
ich die Macht der Boost.String dort aufrufen würde;)
std::string str1 = " hello world! ";
std::string str2 = boost::trim_left_copy(str1); // str2 == "hello world! "
Es gibt viele Operationen (find
, trim
, replace
, ...) sowie Prädikate in dieser Bibliothek verfügbar, wann immer Sie brauchen string
Operationen die nicht im Lieferumfang enthalten sind, finden Sie hier. Auch die Algorithmen haben jedes Mal mehrere Varianten (Groß-/Kleinschreibung und Kopie im Allgemeinen).
- 1. Das häufigste Zeichen in einer Zeichenfolge finden
- 2. Entfernen Sie das erste Zeichen aus einer Zeichenfolge
- 3. So finden Sie das kürzeste Wort in der Zeichenfolge C++
- 4. Mysql Schnitt Zeichenfolge, das erste Zeichen?
- 5. Finden Sie die erste Folge von Zahlen in einer Zeichenfolge?
- 6. Wie wird das erste Zeichen jedes Wortes oder das erste Zeichen einer ganzen Zeichenfolge mit C# in Großbuchstaben geschrieben?
- 7. Finden Sie das erste Zeichen in JTextArea nach Leerzeichen
- 8. So finden Sie das letzte Vorkommen einer Reihe von Zeichen aus einer Zeichenfolge
- 9. Entfernen Sie in Java das erste Zeichen der Zeichenfolge (Komma)
- 10. Wie finden Sie das erste Zeichen einer Zeichenfolge und ersetzen alle Ergebnisse davon in der gleichen Zeichenfolge in Python?
- 11. So finden Sie das Zeichen nach dem zweiten Vokal in einer Zeichenfolge
- 12. C#: Wie erste Zeichen einer Zeichenfolge zu bekommen?
- 13. Ersetzen Sie das Zeichen "in C#
- 14. So holen Sie eindeutige Zeichen in Zeichenfolge
- 15. So zählen Sie bestimmte Zeichen in einer Zeichenfolge
- 16. So finden Sie Anfang und Ende einer Zeichenfolge
- 17. Finden Sie das erste Vorkommen von Elementen in einer Liste von Zeichenfolgen, basierend auf dem ersten Zeichen in der Zeichenfolge
- 18. So finden Sie einen Index einer Zeichenfolge in einer Liste
- 19. So lesen Sie Zeichen in einer Zeichenfolge in Java
- 20. So erkennen Sie hebräische Zeichen in einer Zeichenfolge in Javascript
- 21. So ersetzen Sie Zeichen rekursiv innerhalb einer Zeichenfolge
- 22. Assoziatives Array, das das erste Zeichen der Zeichenfolge zurückgibt
- 23. Entfernen Sie das erste Wort in einer Python-Zeichenfolge?
- 24. Entfernen Sie das erste Zeichen nach einer bestimmten Sequenz
- 25. So entfernen Sie unerwünschte Zeichen in einer Zeichenfolge
- 26. Ersetzen Sie mehrere Zeichen in einer Zeichenfolge in Objective-C?
- 27. So finden Sie ein Datum in einer Zeichenfolge
- 28. Objective C - Entfernen Sie das letzte Zeichen aus der Zeichenfolge
- 29. Scannen Sie eine Zeichenfolge weiter, bis sie das erste/letzte Vorkommen einer Zeichenfolge gefunden hat
- 30. So erhalten Sie die letzten Zeichen einer Zeichenfolge
Welche Codierung ist Ihre Zeichenfolge? Wenn es ASCII ist, dann gibt es nur 4 Leerzeichen, und Vlads Lösung mit find_first_not_of ist gut. ASCII oder Latin 1 Strings decken wahrscheinlich Lehrübungen ab. Wenn Ihre Zeichenfolge UTF-8 oder ein breites Zeichen std :: wstring ist (wie es in einer echten Anwendung sein könnte), stellen Sie eine andere Frage. –
Ja, in diesen Fällen wäre man in der Lage, die 'find_if'-Lösung am unteren Rand des gleichen Posts zu verwenden (optional mit BLL 'boost :: labda :: bind (issspace, _1, my_locale)', um ein bestimmtes Gebietsschema zu binden) my_locale' zu 'isspace' anstatt den Standardwert zu verwenden. – vladr