Überprüfung ist Char = ein Buchstabe



  • Hi, ich bastel zur Zeit an einem Filterprogramm und brauche dafür eine Funktion mit der ich ein Char überprüfen kann ob es ein Buchstabe (von A-Z oder / und a-z) ist, nichts anderes, keine Sonderzeichen oder so...

    gibt es dafür eine Funktion, wenn ja, bitte genaustens erklären und vllt ein Beispiel zu Benutzung geben, bin noch Anfänger.

    Ansonsten dachte ich mir baue ich mir ein Char Array wo ich die Ascii Werte der Zeichen A-Z und a-z reinschubse, damit ich den Index auf 0 habe und nicht zB für A = 65, und in einer for schleife jeden buchstaben einzeln abprüfe und bei einer übereinstimmung einen Hilfswert auf 1 oder true setze, sollte dies die einzige Möglichkeit sein, hierzu die Frage: wie breche ich eine Schleife ab, sollte ich den Wert finden, so das er nciht jedes mal bis zum Ende durchläuft?



  • isalpha



  • bool isAlpha(char C)
    {
        if ( (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z') )
        {return true;}
    
    return false;
    }
    

    hm, was gibt's da zum Erklären...

    Najo, Zeichen sind auch nichts anderes als Zahlen,
    d.h. dass z. B. 'a' als 97 abgelegt wird (ASCII Code).

    Folge:

    char c = 'a';
    

    ist völlig identisch zu

    char c = 97;
    

    Für Grossbuchstaben gilt das allerselbe.

    Da alle Kleinbuchstaben und alle Grossbuchstaben jeweils aufeinander folgen
    (b ist 98, c 99 usw.) lässt sich mit einem Größenvergleich leicht rausfinden,
    ob ein Buchstabe vorliegt oder nicht.

    Seh grad, dass der '/' auch noch geprüft werden soll
    => einfach die If-Abfrage erweitern:

    ( (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z') || (C == '/') )
    


  • naja, eigentlich ist isalpha eine bibliotheksfunktion. neu schreiben ist schwachsinn.

    http://www.cppreference.com/stdstring/isalpha.html



  • Das Chars nicht anderes als Ascii Codes sind, wusste ich schon, aber genau das mit isalpha suchte ich!!!

    Wäre nie drauf gekommen das ich größer gleich a und kleiner gleich z suchen kann ^^

    Auch wenn ich in der Klasse schon der beste Progger bin, hab ich immer noch gewisse Denkblockaden und Schwierigkeiten ^^ Soltlet euch ma n ProgiCode von mir angucken -.-* ich wette die Funktionen und alles köntne man mit OOP oder Gloaben Variablen sooooooo vereinfachen, vllt poste ichs mal hier, wenn ich es fertig habe!

    DANKE FÜR EURE HILFE



  • isalpha darf nicht einfach so mit char aufgerufen werden ⚠

    Der Parameter ist ein int und muss im Bereich 0..UCHAR_MAX liegen oder gleich EOF sein. Ein char mit negativem Wert fuehrt somit zu undefiniertem Verhalten.

    ➡

    char c = ...
    isalpha(static_cast<unsigned char>(c)); // auf freundlichen Hinweis des nachfolgenden Posters geaendert
    

    oder, falls das Zeichen aus einem Stream kommt, gleich als int einlesen:

    int zeichen = mystream.get();
    if (isalpha(zeichen)) ...
    


  • static_cast<unsigned char>
    


  • anonymus schrieb:

    bool isAlpha(char C)
    {
        if ( (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z') )
        {return true;}
    
    return false;
    }
    

    Ich fand' C immer gut, weil man da keine Romane schreiben muss. 😉

    bool isAlpha(char C)
    {
      return (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z');
    }
    


  • jetzt happerts wieder bei mir mit dem Verständniss ^^ wie schon gesagt:

    ICH <<< noob!!!

    h3h3h

    1.)
    Also wieso

    static_cast<unsigned char>
    

    2.)

    Die Funktion isalpha gibt doch einen true oder false Wert zurück, oder?

    bool isAlpha(char C)
    

    kann ich den auch ohne Porbleme als Int nehmen (da 1 = true is und 0 = false)?

    3.)

    Was ist ein Stream? Benutze den FILE-Typ zum Dateien auslesen so kannich mit fread und fwrite mehr oder minder kompliziert Sachen (hier: einzlene Char´s) reinschreiben und auslesen.

    Wieso

    mystream.get();
    

    Kann ich das get nur mit nem Stream und nicht mir nem File machen?

    Sooo das wars erstmal von meiner Seite mit den unmöglichen Fragen h3h3

    Bedanke mich schon jetzt für die geduldigen Personen die mir helfen werden ^^



  • Zu 2:
    ja. aber eigentlich ist isalpha() keine funktion sondern ein makro außerdem mußt du ctype includen, damit du isalpha() verwenden kannst:

    #include<ctype>
    if(isalpha(c)) { ...}
    

    in ctype sind auch noch andere nützliche makros dieser art enthalten
    http://www.cppreference.com/stdstring/isalpha.html

    Zu 3:
    ach bei FILE-typen gibt es funktionen zum schreiben und lesen einzelner zeichen:
    http://www.cppreference.com/stdio/fgetc.html
    http://www.cppreference.com/stdio/fputc.html

    Zu 1:
    Bashar hat recht mit dem was er schreibt, das thema ist allerdings ein bischen kompliziert. der typ char ist bei vielen compilern vorzeichenbehaftet. das führ dazu, daß zeichen mit einem ascii-code von größer als 127 als negative zahlen erscheinen. man sollte das zeichen deshalb vor der übergabe an isalpha() erst auf unsigned char casten. oder das zeichen besser gleich in einer variablen vom typ int speichern.



  • Vielen Dank für die Themen 2 und 3, beides verstehe ich und mit fgetc ist es ziemlich einfacher als mir fread, aber durch die Erklärung hier von fread verstehe ich es besser als mit der Erklärung vom Builder.

    Also vorgezeichnet und unvorgezeichnet... das raff ich net, noch nie was von gehört.

    Heißt vorgezeichnet das er einen X-beliebigen Wert reinschreibt? Also ma bitte ne Grundaufklärung zu vorgezeichnet und unvorgezeichnet und dann nochma zu der Nummer 1 ^^ DANKE



  • "signed" und "unsigned" bedeutet in etwa "vorzeichenbehaftet" und "vorzeichenlos".

    Für eine nähere Erklärung siehe hier.


Anmelden zum Antworten