Prüfen, ob String nur Zahlen enthält
-
Wie?
Sollte für char Arraies ebenso wie für strings anwendbar sein. Und sollte möglichst kurz und einfach sein.
-
Entweder Regex (tr1, boost), oder isdigit(..).
-
isdigit()prüft ja nur, ob das erste Zeichen eine Zahl ist. Ich brauche aber eine Funktion, die z.B. in diesen Fällen:"123Hallo" "123 Hallo" "Hallo123" "H1allo"falsezurück gibt. Nur, wenn der eingegebene String nur aus Zahlen besteht, soll true ausgegeben werden:"2556" == trueboost kenne ich noch nicht. Geht das damit?
-
Für Strings (auch C-Strigs, also char*)
Mit http://www.cplusplus.com/reference/clibrary/cctype/isdigit/ einen entspechenden Funktor (Funktionsobjekt) basteln und zusammen mit
http://www.cplusplus.com/reference/algorithm/find_if/ auf den String loslassen.Für char:
char c = /*??*/; //nicht portabel, da nicht garantiert, dass '0'-'9' in einer Reihe sind: return (c >= '0' && c <= '9'); //portabel: switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return true; default: return false; }
-
pumuckl schrieb:
//nicht portabel, da nicht garantiert, dass '0'-'9' in einer Reihe sind: return (c >= '0' && c <= '9');Doch, ist garantiert.
§2.3.3In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
-
pumuckl schrieb:
Für Strings (auch C-Strigs, also char*)
Mit http://www.cplusplus.com/reference/clibrary/cctype/isdigit/ einen entspechenden Funktor (Funktionsobjekt) basteln und zusammen mit
http://www.cplusplus.com/reference/algorithm/find_if/ auf den String loslassen.Für char:
char c = /*??*/; //nicht portabel, da nicht garantiert, dass '0'-'9' in einer Reihe sind: return (c >= '0' && c <= '9'); //portabel: switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return true; default: return false; }Super, das hat mir geholfen. Danke.
-
-
regex wäre meine wahl gewesen.

-
std::string s = "1234"; if(std::find_if(s.begin(), s.end(), !boost::bind(is_digit, boost::_1)) == s.end()) return true; else return false;oder noch einfacher:
return std::count_if(s.begin(), s.end(), isdigit) == s.size();