string überprüfen mit isdigit ?
-
also wenn ich das richtig lese ist isdigit nur zum prüfen einer ziffer und z.b isalnum eon buchstabe oder ziffer. finde nichts für den ganzen string
Nun ich vermute wenn ich z.b
if (isdigit(string))das er dann sicherich nur die erste stelle prüft oder ?
-
Brusko schrieb:
Nun ich vermute wenn ich z.b
if (isdigit(string))das er dann sicherich nur die erste stelle prüft oder ?
Falsch vermutet. Das gibt nur einen saftigen Compilerfehler. Eine fertige Funktion dafür gibt es in der STL nicht. Auf die Gefahr hin, mich zu wiederholen: Schreib' dir eine Funktion, die es macht.
Brusko schrieb:
also wenn ich das richtig lese ist isdigit nur zum prüfen einer ziffer und z.b isalnum eon buchstabe oder ziffer.
Was hast du "richtig gelesen"? Die Deklaration von
isdigit()(int isdigit( int c );) wohl nicht, denn dann gäb's keinen Zweifel daran, dass die nix für Strings ist...greetz, Swordfish
-
for( int i = 0; i < eingabe.size(); ++i )
{
if( !isdigit( eingabe[ i ] ) )
//ungültige eingabe, abbrechen
}Was ist denn mit diesem code, wird die die schleife so oft durchlaufen wie ziffern/buchstaben eingabe hat ? und die anweisung überprüft jede nacheinander ?
-
Elegant wäre statt
inteinstd::string::const_iterator, wenn schon nicht ein Iterator, dann wenigstens einstd::string::size_type, und wenn's dir zu lange zum Schreiben ist, dann wenigstens einstd::size_t.Funktion sehe ich übrigens noch immer keine

greetz, Swordfish
-
mir gings jetzt nu ebend drum ob ich die schleife verstanden hatte *g* nun ich bin ebend anfänger und werde wohl sicher einige fehler noch machen. Ob ich das nun in eine funktion hinbekomme weis ich noch nicht hab im Thread zuvor
http://www.c-plusplus.net/forum/viewtopic-var-t-is-205658.html
kurze fragen gestellt gehabt und warte noch auf anwort *g*
-
Du solltest Dich wirklich über Parameter informieren.
atoiist übrigens AFAIR nicht Standard. Nimm besser einen Stringstream.greetz, Swordfish
-
Parameter sind doch die Variablen die ich z.b in der funktion verwende oder ? was habe ich denn konkret falsch ?? evtl eine bestimmte stelle zu zum draufhinstossen ?
-
#include <iostream> int foo; void bar( ) { // tu was mit foo, ohne parameter std::cout << foo << std::endl; } int main( ) { foo = 5; bar( ); }#include <iostream> void bar( int parameter ) { // tu was mit dem parameter std::cout << parameter << std::endl; } int main( ) { int foo = 5; bar( foo ); }greetz, Swordfish
-
naja ich glaube eines nach dem anderen ,,,fangen wir mit string prüfen an
da hänge ich noch 
-
std::find_if ...
-
Naja ich hab es nu doch mit isdigit gemacht, ob es elegant ist kann ich nicht sagen aber es funktioniert soweit anscheinend.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-205731.html
-
Ehm weiß nicht was das da am Ende löst ... hab dein Problem da nicht ganz vor Augen ... generell findest du aber die erste Stelle, die kein Zeichen ist z.B. so:
const std::string sample("01234a23c"); std::string::const_iterator it(std::find_if(sample.begin(), sample.end(), std::not(std::ptr_fun(std::isdigit))); if (it == sample.end()) std::clog << "Alle Zeichen sind Zahlen!" << std::endl; else std::cerr << "Das Zeichen \'" << *it << "\' ist keine Zahl!" << std::endl;
-
Das problem war es eigentlich, ein string das 6 zeichen durch die eingabe von getnstr enthält zu überprüfen ob es eine gültige uhrzeitformat entspricht.
wie 235959 ohne irgendwelche buchstaben oder kommas drin.dieses soll später in int mit atoi umgeändert werden ich weis nicht warum aber ich vergleiche lieber im programm int werte
-
int vergleich ist auch schneller als zeichen(array!) vergleich ...
-
sagen wir nes so ich habs gehofft das es evtl so ist aber sicher wuste ich es nicht
bin froh das es funktioniert ob es nu alles richtig waage ich dennoch zu bezweifeln. wenn ich nu im classen arbeite, habe ich da jetzt mit char jalousie[128][7] gearbeitet ist es da besser mit string zu arbeiten ?? warum ??
-
(D)Evil schrieb:
Ehm weiß nicht was das da am Ende löst ... hab dein Problem da nicht ganz vor Augen ... generell findest du aber die erste Stelle, die kein Zeichen ist z.B. so:
std::string::const_iterator it(std::find_if(sample.begin(), sample.end(), std::not(std::ptr_fun(std::isdigit)));(abgesehen davon, dass du wahrscheinlich
std::not1meinst: ) hier hat man wieder das problem, dass der compiler nicht weiß, welches isdigit gemeint ist.Brusko:
der vorteil vonstd::string? du hast ein unglaublich mächtiges interface zur verfügung. es ist einfacher, zeichenketten zu vergleichen, zu ändern, oder in ihnen etwas zu suchen:std::string::const_iterator it (sample.begin() + sample.find_first_not_of("0123456789"));wenn du bei der eingabe mit trennzeichen zwischen den einzelnen stunden/minuten/sekunden-werten arbeiten würdest, wäre es (1) lesbarer und (2) wahrscheinlich auch einfacher (verständlicher) zu bearbeiten:
string time = "23:59:59"; stringstream str(time); unsigned h, m, s; str >> h; str.ignore(); str >> m; str.ignore(); str >> s; str.ignore(); if (h > 24) //fehler if (m > 59) //fehler if (s > 59) //fehleransonsten lässt sich mit ein bisschen rechnerei deine zahl auch so zerlegen:
int time = 235959; int hours = time / 10000; int minutes = (time / 100) % 100; int seconds = time % 100;du solltest das intern aber wohl tatsächlich besser einheitlich als sekunden speichern.
-
nun die zahl zerlegen brauche ich ja so nicht, ich habe mit ein time_t ein string wo z.b kommplet drin steht welcher tag und welche uhrzeit. Tag Montag beginnent mit 1 oder ebend die zeit 235959 nun will ich es später so abspeichern das z.b 1235959 steht. nicht jede sekunde und mintute extra. Ein ganze Zahl wo sogesehen alle drin ist evtl noch eine 0 oder 1 dazu für auf und ab.
Nun mus ich mir noch raussuchen wo bzw wie mann eine zahl zu dran setzt...am stringt oder am int (wenn das geht bei int)mein code wird sicherlich nicht schön sein
aber wenn er nicht "falsch" ist möchte ich es erstmal so lassen und wenn ich mehr weis von programmieren kann ich es später noch gerne umschreiben. Welches auch sicherlich passieren wird.
-
pharmacy;