2016-10-26 17 views
2

Gibt es eine Möglichkeit, die Interpunktion speziell am Anfang und am Ende einer Zeichenfolge zu entfernen, während Kontraktionen und Possessive in Ruhe gelassen werden?Interpunktion am Anfang und am Ende der Zeichenfolge entfernen C++

z. B. "! Wow!" werden "wow" und "nicht" würde bleiben würde "nicht"

+6

Sicher. Es wird jedoch Code erfordern, fürchte ich. Wie bist du ausgegangen? (Ich nehme nicht so gut an, sonst wärst du nicht hier). Vielleicht post * in Ihrer Frage * und wir können sehen, wo das Problem liegt? – WhozCraig

+0

Dieser Beitrag kann von Nutzen sein: http://StackOverflow.com/a/25385766/3807729 nicht sicher, ob es sich um ein Duplikat handelt oder nicht. – Galik

+0

Ich habe versucht, das Zeichen am Index zu löschen, aber das wirft einen Fehler, weil der Index dadurch leer ist. –

Antwort

8

Sie können das tun, mit boost::trim_if:

std::string a = "!wow!"; 
boost::trim_if(a, [](char c) { return std::ispunct(c); }); 
std::cout << a << '\n'; 

Ausgänge:

wow 
+0

Nicht mit Boost vertraut. Gibt es einen Artikel, in dem ich mehr über die Verwendung in diesem Kontext erfahren könnte? Oder gibt es eine universellere Option? –

+0

@ bfriz_96 Nichts ist so elegant. Sie könnten ['find_first_not_of'] (http://en.cppreference.com/w/cpp/string/basic_string/find_first_not_of) und [' find_last_not_of'] (http://en.cppreference.com/w/cpp/string/basic_string/find_last_not_of) und hole die ['substr '] (http://en.cppreference.com/w/cpp/string/basic_string/substr) zwischen ihnen – user4581301

+0

@ bfriz_96 Hier ist ein Überblick/Tutorial für Boost String Algos: http://www.boost.org/doc/libs/1_62_0/doc/html/string_algo/usage.html –

Verwandte Themen