Datentyp prüfen



  • hi!

    also schonmal vorweg...
    dies ist eine totale nOOb frage, aber ich hab schon alles durchsucht und keinen Hinweis gefunden wie man es machen kann. (auch nicht mit suchen im Forum oder im FAQ oder so..)

    Also:
    wie kann ich prüfen ob ein AnsiString ausschliesslich aus Zahlen zwischen 0 und 9 besteht?

    thx!



  • Hi,

    bool __fastcall STRINGistINT(String zupruefen)
    {
     for (int a=1; a<=zupruefen.Length(); a++)
      if ((zupruefen[a]<"0") || (zupruefen[a]>"9")) return false;
     return true;
    }
    

    Ich hoffe das klappt! (ungetestet)

    Alexander Sulfrian

    <edit> Aufruf z.B.:

    if (STRINGistINT(DATEN)) int DATEN_INT = StrToInt(DATEN);
    

    </edit>

    [ Dieser Beitrag wurde am 06.02.2003 um 10:57 Uhr von Alexander Sulfrian editiert. ]



  • for(int i=1; i<=AString.Length(); i++)
    {
       // ist Zeichen numerisch?
       if(isdigit(AString[i]))
       {
          // tue was!
       }
    }
    


  • Original erstellt von JeGr:
    **```cpp
    for(int i=1; i<=AString.Length(); i++)
    {
    // ist Zeichen numerisch?
    if(isdigit(AString[i]))
    {
    // tue was!
    }
    }

    o.0 das konstrukt zählz ja die ganze länge durch aber wie wärs einfach mit 
    if ( AString.Length() == 1 )
       {
       if(isdigit(AString)
          {.. // do 
          }
          else { // fehler }
        }
        else { // fehler }
    

    er will ja kein höllen code sondern einfach ...

    wie kann ich prüfen ob ein AnsiString ausschliesslich aus Zahlen zwischen 0 und 9 besteht?

    oder vielleicht noch bissl optimiert :

    if ((AString.Length() == 1)&&(isdigit(AString))
       cout << " Eine Zahl zwischen 1 und 9 " << endl;
     else 
       cout << " keine zahl zwischen 1 und 9 " << endl;
    

    [ Dieser Beitrag wurde am 06.02.2003 um 11:11 Uhr von 1ntrud0r editiert. ]



  • @1ntrud0r: Wieso?
    Ich muss doch den gesamten String zeichenweise überprüfen, ob das jeweils aktuelle Zeichen eine Zahl ist.
    Du prüfst doch nur ab, wenn der String aus einem Zeichen besteht!

    Was ist daran ein Höllencode?
    Ist meiner Ansicht verständlicher als das, was du hier gepostet hast!



  • Danke, funktioniert prima!!!! 🙂



  • Original erstellt von JeGr:
    **@1ntrud0r: Wieso?
    Ich muss doch den gesamten String zeichenweise überprüfen, ob das jeweils aktuelle Zeichen eine Zahl ist.
    Du prüfst doch nur ab, wenn der String aus einem Zeichen besteht!

    Was ist daran ein Höllencode?
    Ist meiner Ansicht verständlicher als das, was du hier gepostet hast!**

    weil er wissen will ob das ne zahl zwischen 0 und 9 ist !!!!!! und 1 - 9 1 zeichen is

    *edited*

    [ Dieser Beitrag wurde am 06.02.2003 um 11:27 Uhr von 1ntrud0r editiert. ]



  • Ich denke eher, dass er prüfen will, ob z.B. der String "12345" bzw. "12g56w" nur aus Zeichen besteht.
    Die Länge des Strings hat aber hier mehr als ein Zeichen.
    Somit würde dein Vorschlag scheitern, da du ja nur die Prüfung machst, wenn der String aus genau einem Zeichen besteht.



  • hmm jo 😉 da hast recht aber deine funktion tut das net 🙂 was du grad gesagt hast 🙂 ne funktion die auch mehrere zeichen überprüft ..

    for(int i=0; i < AString.Length(); ++i)
    {   if(!isdigit(AString[i]))
           cout << " Fehler ! Die zahl besteht nicht _nur_ aus Zahlen " << endl;
    }
    

    🙄 *kreativ is*



  • Jetzt hast du doch fast genau die Funktion, die ich auch schon gepostet habe.
    Nur wird deine Funktion nicht funktionieren, da ein AnsiString mit dem Index 1 beginnt, du aber schon bei 0 in der Schleife anfängst zu zählen. Somit wirst du dort eine Exception bekommen.
    Aber ansonsten sehe ich von der Funktion her keine grossen Unterschiede.

    Du machst hier halt noch gleich die Fehlerbehandlung, aber ich denke, dass ClippingError das auch schon alleine hinbekommen hat 😉



  • du weisst schon was der unterschied zwischen i++ und ++i ist oder ? 😉
    Ausserdem wird meine funk wohl besser prüfen .. hast du schonma bei deiner getestet was passiert wenn du 12345A345 machst ... 🙂

    bei deiner : 8x wird ne routine durchgeführt und 1x net 😉
    bei meiner : wird ausgegeben das es keine zahl is 😉

    *edit*
    dummerweise hast du recht 😢 ++i macht in der for schleife net was es sollte ...

    [ Dieser Beitrag wurde am 06.02.2003 um 12:27 Uhr von 1ntrud0r editiert. ]



  • Ich habe mein Beispiel aus einer vorhandenen Methode einfach heraus kopiert.
    Hier ist der gesamte Code der Methode:

    bool StringParser::IsNumeric(AnsiString AString)
    {
      // Variablendeklaration
      bool Numeric = false;
    
      // überprüfe zeichenweise, ob aktuelles Zeichen numerisch ist
      // wenn Ja: Rückgabewert = TRUE,
      // wenn Nein: Rückgabewert = FALSE, beende Vergleich
      if(!AString.IsEmpty())
      {
        for(int i=1; i<=AString.Length(); i++)
        {
          // ist Zeichen numerisch?
          if(isdigit(AString[i]))
          {
            // setze Flag, dass Zeichen numerisch ist
            Numeric = true;
          }
          // Zeichen ist nicht numerisch
          else
          {
            // setze Flag, dass Zeichen nicht numerisch ist
            Numeric = false;
            // beende Schleife
            break;
          }
        }
      }
      // gib Flag zurück, ob String numerisch
      return Numeric;
    }
    

    Somit wird bei mir auch nur so lange verglichen, bis ein nicht numerisches Zeichen auftritt!

    🕶


Anmelden zum Antworten