letztes Zeichen eines char



  • Hallo

    ich habe eine Funktion die eine pointer auf eine char bekommt.

    int
    test (char* myChar)
    {
    
    }
    

    wie kann ich auf das letzte Element von myChar zugreifen und prüfen ob es eine 'z' ist?

    Würde mich über Hilfe freuen.



  • Da mir hier so oft geholfen wird, will ich mich nun auch mal versuchen...

    @OP: Du kannst einfach das CharArray durchlaufen mit einer for-Schleife
    und wenn du ein '\0' am Ende des Arrays findest, dann dekrementierst du
    den Zeiger auf das Array einmal und prüfst auf 'z'.

    MfG ::john:: 🙂



  • john schrieb:

    Da mir hier so oft geholfen wird, will ich mich nun auch mal versuchen...

    @OP: Du kannst einfach das CharArray durchlaufen mit einer for-Schleife
    und wenn du ein '\0' am Ende des Arrays findest, dann dekrementierst du
    den Zeiger auf das Array einmal und prüfst auf 'z'.

    MfG ::john:: 🙂

    Hmm, hab mir jetzt sowas zusammen gebaut:

    char *ptr;
    
    ptr = strrchr(myChar,'\0');
    ptr--;
    if (strcmp(ptr, "/") == 0) {}
    

    ist das so sauber, oder gibts da noch etwas schöneres 😉



  • john schrieb:

    Da mir hier so oft geholfen wird, will ich mich nun auch mal versuchen...

    @OP: Du kannst einfach das CharArray durchlaufen mit einer for-Schleife
    und wenn du ein '\0' am Ende des Arrays findest, dann dekrementierst du
    den Zeiger auf das Array einmal und prüfst auf 'z'.

    MfG ::john:: 🙂

    Eine For-Schleife ist in diesem Fall nicht so sinnvoll. Stattdessen würde ich eine While-Schleife empfehlen. Trotzdem wäre das nicht sonderlich elegant, da man das Problem ganz einfach mit strlen lösen kann.

    Hier main ein Beispielcode. Ich habe beide Lösungen angegeben:

    #include <stdio.h>
    #include <string.h>
    
    // Elegante Lösung mit strlen
    int testFunc1(char *str)
    {
    	// Ermittlung des letzten Zeichens
    	char lastChar = str[strlen(str) - 1];
    
    	// Ausgabe
    	printf("Eingabe: %s\n", str);
    	printf("Letztes Zeichen: %c\n", lastChar);
    
    	return 0;
    }
    
    // Lösung mit Schleife
    int testFunc2(char *str)
    {
    	char lastChar;
    	int pos = 0;
    
    	// Ermittlung der Position
    	while (*str++)
    	{
    		pos++;
    	}
    
    	// Zeiger wieder zurücksetzen
    	str -= pos + 1;
    
    	// Ermittlung des letzten Zeichens
    	lastChar = str[pos - 1];
    
    	// Ausgabe
    	printf("Eingabe: %s\n", str);
    	printf("Letztes Zeichen: %c\n", lastChar);
    
    	return 0;
    }
    
    int main()
    {
    	char theChar[] = "Hallo, Welt";
    
    	testFunc1(theChar);
    	testFunc2(theChar);
    }
    


  • cchar schrieb:

    john schrieb:

    Da mir hier so oft geholfen wird, will ich mich nun auch mal versuchen...

    @OP: Du kannst einfach das CharArray durchlaufen mit einer for-Schleife
    und wenn du ein '\0' am Ende des Arrays findest, dann dekrementierst du
    den Zeiger auf das Array einmal und prüfst auf 'z'.

    MfG ::john:: 🙂

    Hmm, hab mir jetzt sowas zusammen gebaut:

    char *ptr;
    
    ptr = strrchr(myChar,'\0');
    ptr--;
    if (strcmp(ptr, "/") == 0) {}
    

    ist das so sauber, oder gibts da noch etwas schöneres 😉

    Was hast du denn konkret vor?



  • Das strrchr ist mir nicht bekannt gewesen, ich habe allerdings Google entnehmen können, das dies zum Auffinden des letzen Vorkommens eines Zeichens in einem String dient. Code kann ich nicht so gut einschätzen, da ich selbst noch Neuling bin, außer dem if, dass würd ich so machen:

    if( *ptr == 'z' ){
        // mach was draus...
    }
    

    MfG ::john::



  • Mist..
    1. zu spät
    2. nicht die Idee mit strlen() gehabt



  • Wenn du dir eine Funktion schreiben willst, die überprüft, ob am Ende eines Strings ein / steht, dann kannst du das übrigens als Einzeiler lösen!

    int checkStr(char *str)
    {
    	return str[strlen(str) - 1] == '/';
    }
    

Anmelden zum Antworten