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
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
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; }
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]
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:
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.
Hexagon Geschrieben 12. September 2006 Geschrieben 12. September 2006 Ach ja, stimmt ja...aber "übersieht" er nicht das erste Zeichen?
Guybrush Threepwood Geschrieben 12. September 2006 Geschrieben 12. September 2006 Wieso sollte er das erste Zeichen überspringen?
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:
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
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.
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.
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden