String auf illegale Zeichen prüfen
-
Warum ist dein zweites Argument ein char-Array und kein String? Dein Problem rührt daher:
sizeof(chars) / sizeof(char)
. Arrays in Funktionen funktionieren so nicht.edit: Zu langsam.
-
Habe ich mich auch gerade gefragt :p
Ich habe das jetzt mit 2 Strings und 2 Iteratorn gemachtKeine Ahnung wieso ich das zuerst anders gemacht habe - hatte wahrscheinlich die einzelnen Zeichen als Array im Hinterkopf und diese Möglichkeit nicht in Betracht gezogen.
Vielen Dank - jetzt läuft bei mir aber alles.
-
#include <string> #include <algorithm> bool isStringValid(std::string const &str, std::string const &invalid_elements) { return std::find_first_of(str.begin(), str.end(), invalid_elements.begin(), invalid_elements.end()) == str.end(); }
-
Danke sehr.
Sieht auf jeden Fall eleganter aus
Ich werde mir das mal ganz genau angucken.
-
Oder noch ein bisschen kürzer:
bool isStringValid( std::string const &str, std::string const &invalid_elements ) { return str.find_first_of( invalid_elements ) == std::string::npos; }
Die von wxSkip vorgeschlagene Verwendung von konstanten Referenzen macht auf alle Fälle Sinn um ein unnötiges Kopieren der Strings zu vermeiden.
Siehe dazu auch: http://www.parashift.com/c++-faq-lite/const-correctness.html
-
Danke.
Interessanter Link
-
Das Ganze kann man auch mit "regulären Ausdrücken" lösen. Entweder dein Compiler unterstützt schon "std::tr1::regex" oder man verwendet "boost::regex".
-
HighLigerBiMBam schrieb:
Das Ganze kann man auch mit "regulären Ausdrücken" lösen.
Das Ganze kann man auch mit Boost.Spirit lösen.
Nur ist beides viel umständlicher wie genau die Funktion anzuwenden, die dafür gedacht ist (Wobei Boost.Spirit hier sogar besser wie Regex wäre).
-
Und als ist besser als wie.
-
Danke sehr.
Ich gucke mir das alles mal genau an. Aber ich bleibe vorerst bei der ersten vorgestellten Lösung, bis ich besser C++ kann.