TinTin Geschrieben 8. September 2006 Geschrieben 8. September 2006 Servus, ich möchte überprüfen ob der Inhalt eines CStrings nur Ziffern enthält oder auch auch andere Zeiche enthalten sind. Bisher prüfe ich jedes Zeichen in dem String, ich frage mich aber ob es keine schnellere bzw. kürzere und einfachere Methode gibt. Was am ende dabei herauskommen soll wäre ist: bool isStringNummeric(CString); wie gesagt, ich habe eine Lösung, aber es kann ja sein das jemand das ganze schon einmal kurz gelöst hat. TinTin Zitieren
Goos Geschrieben 8. September 2006 Geschrieben 8. September 2006 Bisher prüfe ich jedes Zeichen in dem String, ich frage mich aber ob es keine schnellere bzw. kürzere und einfachere Methode gibt. Was soll an deiner Methode kompliziert sein? Ich wuerde nun auch ueber den String iterieren und per isdigit() jedes Zeichen pruefen. Goos Zitieren
TinTin Geschrieben 12. September 2006 Autor Geschrieben 12. September 2006 hab grade mal was gemacht: bool isStringNumeric(CString csStr) { int j = csStr.GetLength() ; int l = -1; bool bRet = true; if (j > 0) { for (int k=0;k<j;k++) { char chr = csStr.GetAt(k); l = isdigit(chr); if (l == 0) { bRet = false; } } } else { bRet = false; } return bRet; } Zitieren
Klotzkopp Geschrieben 12. September 2006 Geschrieben 12. September 2006 Warum so umständlich? bool isStringNumeric(CString csStr) { int j = csStr.GetLength(); for( int i = 0; i < j; ++i ) { if( !isdigit( csStr[i] ) ) { return false; } } return true; }[/CODE] Zitieren
Hexagon Geschrieben 12. September 2006 Geschrieben 12. September 2006 Kurz Zwischenfrage an Klotzkopp: int j = csStr.GetLength(); for( int i = 0; i < j; ++i ) Sollte das nicht am Ende abstürzen, da i == csStr.GetLength()? :confused: Zitieren
Klotzkopp Geschrieben 12. September 2006 Geschrieben 12. September 2006 Sollte das nicht am Ende abstürzen, da i == csStr.GetLength()? :confused:Nein. Die Schleife läuft ja nur, solange i < j ist. Zitieren
Hexagon Geschrieben 12. September 2006 Geschrieben 12. September 2006 Ach ja, stimmt ja...aber "übersieht" er nicht das erste Zeichen? Zitieren
Guybrush Threepwood Geschrieben 12. September 2006 Geschrieben 12. September 2006 Wieso sollte er das erste Zeichen überspringen? Zitieren
Hexagon Geschrieben 12. September 2006 Geschrieben 12. September 2006 Sorry, war ein Denkfehler... @Guybrush Threepwood: Nun ++i erhöht ja um eins bevor es verwendet wird. War ein kleines Verständnisproblem...:floet: Zitieren
Goos Geschrieben 12. September 2006 Geschrieben 12. September 2006 Nun ++i erhöht ja um eins bevor es verwendet wird. War ein kleines Verständnisproblem...:floet: Klingt in dem Fall nach einem kleinen Verstaendnisproblem Goos Zitieren
Klotzkopp Geschrieben 12. September 2006 Geschrieben 12. September 2006 Nun ++i erhöht ja um eins bevor es verwendet wird. Mit i++ würde es auch funktionieren. Der Wert dieses Ausdrucks ist in diesem Fall der einzige Unterschied zwischen i++ und ++i, und der wird hier nicht benutzt. Zitieren
TinTin Geschrieben 12. September 2006 Autor Geschrieben 12. September 2006 Warum so umständlich? Stimmt, warum so umständlich. Der String ist ja schon nicht mehr nummerisch wenn isdigit() einmal false ist. naja, war ja nur ein erster versuch, bevor das mit dem isdigit kam war die Funktion noch schlimmer...aber vergesen wir das, heute war sowieso nicht mein Tag -> anderer Thread mit dem Debugger. EDIT: csStr.GetLenght() < 1 sollte meiner meinung nach schon abgefangen werden, sonnst ist bei einem leeren String der Returnwert dennoch true und das stimmt ja nun nicht. Zitieren
Klotzkopp Geschrieben 13. September 2006 Geschrieben 13. September 2006 csStr.GetLenght() < 1 sollte meiner meinung nach schon abgefangen werden, sonnst ist bei einem leeren String der Returnwert dennoch true und das stimmt ja nun nicht.Stimmt, da ist was dran. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.