Übungen zu Vektoren und Strings



  • Hallo allerseits,

    Ein Anfänger braucht mal wieder eure Hilfe. 🙂

    Ich habe folgende Aufgabe bekommen:

    Schreiben sie ein C-Programm das eine eingegebene Emailadresse auf formale Korrektheit prüft.

    Als Regeln für die Formale Korrektheit gelten: aaaa@xxxx.yyy

    Dabei gilt: Es gibt nur einmal das Zeichen '@'.
    Vor diesem Zeichen dürfen nur Buchstaben (groß oder klein, Ziffern, der Punkt ('.'), und der Unterstrich ('_') verwendet werden. (Bereich "aaaa").

    Nach dem '@' muss irgendwann ein Punkt ('.') folgen. Vor dem Punkt sind nur Groß oder Kleinbuchstaben, Ziffern, das Minuszeichen ('-') oder der Unterstrich ('_') zulässsig. (Bereich "xxxx")

    Nach dem Punkt müssen noch 2 oder 3 Kleinbuchstaben folgen. (Bereich "yyy")

    Als Ergebnis liefert das Programm die Ausgabe: Die eingebene Adresse ist gültig oder nicht gültig.

    ------------------------------

    Angefangen haben meine Überlegungen mit einem Vektor das ich beispielsweise auf [40] Zeichen begrenze.

    Als erstes hab ich das @ gesucht, danach bin ich vor gegangen und hab die Eingabe überprüft wie lange sie überhaupt geht. Danach habe ich den . gesucht vom Ende ausgesehen.

    #include <stdio.h>
    #include <conio.h>
    
    void main ()
    
    {
    char email [40];
    int i, k1, k2, k3;
    clrscr ();
    printf("Bitte geben Sie eine EmailAdresse ein:\n");
    fflush (stdin);
    scanf ("%s", email);
    
    for (i=0; email [i] !='@'; i++);    // K1 = 1. Haltepunkt bei @
    k1=i+1;
    printf("Wo ist das @: %d\n\n", k1);
    for (i=0; email [i] !='\0'; i++); //   K2 = ENDE von der Emailadresse
    k2=i;
    printf("Wo ist das Ende: %d\n\n", k2);
    for (i=i; email [i] !='.'; i--); //    K3 = 2. Haltepunkt bei . vom Ende her gesucht
    k3=i+1;
    printf("Wo ist der Punkt: %d\n\n", k3);
    
    getch();
    }
    

    Meine Frage ist jetzt wie ich das hinbekomme das bis zum "@" nur die angeforderten buchstaben, ziffern, ., _ gelten ?

    Das gleiche gilt nach dem @.

    Ich hoffe ihr könnt mir Tipps geben und ich bin nicht auf einem Holzpfad. 😞

    Gruß



  • Etwa so:

    int pos=0;
    while(/*nicht @*/)
    {
        /*teste zeichen, wenn zeichen nicht erlaubt, dann fehler*/
        pos++;
    }
    pos++; // @ überspringen
    while(/*nicht .*/)
    {
        /*teste zeichen, wenn zeichen nicht erlaubt, dann fehler*/
        pos++;
    }
    pos++; //. überspringen
    //2 oder 3 kleinbuchstaben erwarten
    

    Natürlich muss man hier auch testen ob das Ende erreicht ist, damit man nicht über die Arraygrenzen hinausliest.. ^^



  • Zur Bestimmung von Zeichenklassen gibt es schöne Funktionen aus der ctype.h



  • servus, vielen dank für deine schnelle antwort!!! 🙂

    leider bringt mir deine hilfe nicht viel^^ kannst du es ein bisschen besser erklären oder mit echtem code schreiben damit ich dahinter komme ?:)



  • Wie schreibst du einen Vergleich, ob ein Zeichen ein '.' ist?

    Wie schreibst du einen Vergleich, ob ein Zeichen eine Ziffer ist?

    Wie schreibst du einen Vergleich, ob ein Zeichen eine Ziffer oder ein Punkt ist?


Log in to reply