Buchstabenabfrage



  • Hey Leute
    Wie frage ich ab ob ein Zeichen ein Buchstabe ist?

    = 'a' && <= 'z'
    oder umgekehrt?

    Gruß
    c.nub



  • Ich denke so:

    zeichen >='A' && teichen <='Z' || zeichen >='a' && zeichen <='z'



  • nope überall ein && da bin ich sicher



  • Wenn du da überall ein && hast, dann ist das immer falsch.
    Da bin ich mir sicher.



  • Ahhh ja, stimmt, sorry, jz hab ichs verstanden hehe



  • for (i = 0, j = 0; s[i]; i++)
    	{
    		if (s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z')
    		{
    			if (s[i++] >= 'a' && s[i++] <= 'z' || s[i++] >= 'A' && s[i++] <= 'Z')
    			{
    				z++;
    			}
    		}
    	}
    
    	printf("%s %d", s, z);
    

    Wenn ich aaa eingebe will ich dass mir eine 3 ausgegebn wird.
    Ist aber nicht der Fall naja fast nie.
    Eingabe: a Ausgabe: 1
    E: aa A: 2
    E: aaa A: 1
    E: aaaa A: 2

    Warum ??
    Mein eigentliches Projekt ist es wenn ich aaa Eingebe, dass es 3a ausgeben soll. Tips wären super.



  • for (i = 0, j = 0; s[i]; i++)
        {
            if (s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z')
                z++;   
        }
        printf("%s %d", s, z);
    

    Jetzt sollte er 3 ausgeben.

    Deine 2. If-Abfrage war merkwürdig bzw. unnötig.



  • Danke
    Ja.. Naja also ich brauch die zweite Abfrage um im selben Durchlauf abzufragen ob das zweite Zeichen auch ein A bzw ein Buchstabe ist(*edit* also das gleiche wie das letzte) weil ich ja dann alles nach links verschieben muss... oder bin ich gerade total verwirrt und weiss nicht wovon ich rede?



  • Willst du´s im String speichern oder nur ausgeben?



  • Es ist eigentlich egal, aber ich würd gerne beide Wege wissen

    Gruß c.nub



  • Noch da Sunny31?



  • Huhu,

    Wenn du es nur ausgeben willst, müsstest du es so machen:

    Du gehst jedes einzelne Zeichen durch und falls es im Alphabet liegt, startest du eine Schleife mit der Bedingung:

    Solange str[i] == zeichen
    z++

    So ein Beispiel hab ich noch irgendwo rumliegen gehabt:

    void compress ( char str[] )
    {
    	int i;
    	int counter=0;
    	while(*str)
    	{
    		if ( *str >= 'A' && *str <= 'Z' || *str >= 'a' && *str <= 'z' )
    		{
    			i = *str;
    			while ( *str == i && *str != NULL )
    			{
    				counter++;
    				str++;
    			}
    			printf("%c : %i\n", i,counter);
    			counter=0;
                            str--;
    		}
    		str++;
    	}
    }
    


  • Genau! So heißt es auch bei uns also Kompress.
    Uhm, wir haben das mit den Pointern noch nicht gelernt. Kann ich statt den Pointern ein Array machen und einen Index rein den ich nach jedem Verwenden erhöhe?
    Oder wie funktioniert das?



  • Jup, kannst du machen.

    statt: *str machst du halt: str[index]



  • Ich weiß nicht genau wo ich was verändern muss. Bekomme Fehlermeldungen.

    void compress ( char str[] )
    {
        int i;
        int counter=0;
        while(*str) // nur str?
        {
            if ( *str >= 'A' && *str <= 'Z' || *str >= 'a' && *str <= 'z' ) // hier ist alles klar also str[index] bei jedem
            {
                i = *str; // hier??? index statt *str?
                while ( *str == i && *str != NULL ) // str[index] ?
                {
                    counter++;
                    str++; // index++?
                }
                printf("%c : %i\n", i,counter); // i als char ausgeben? haben wir doch als integer deklariert
                counter=0;
                            str--; // index--?
            }
            str++; // index++?
        }
    }
    

    Danke schonmal für die Antworten und den Code



  • void compress ( char str[] )
    {
        int i;
        int counter=0;
        int index=0;
        while(str[index++])
        {
            if ( str[index] >= 'A' && str[index] <= 'Z' || str[index] >= 'a' && str[index] <= 'z' ) 
            {
                i = str[index];
                while ( str[index] == i && str[index] != '\0') 
                {
                    counter++;
                    index++;
                }
                printf("%c : %i\n", i,counter); // Nennt sich implizite Konvertierung von int nach char
                counter=0;
                index--;
            }
            index++;
        }
    }
    

Anmelden zum Antworten