[C] - Visualizza Stringa Capovolta Ricorsivamente

di il
6 risposte

[C] - Visualizza Stringa Capovolta Ricorsivamente

Salve, vorrei un parere sul seguente esercizio:

ES: (Visualizzare una stringa al contrario) Scrivete una funzione ricorsiva string_reverse che riceva come argomento un vettore di caratteri, lo visualizzi al contrario (dall'ultimo carattere al primo) e non restituisca nessun dato. La funzione dovrà terminare la propria elaborazione e restituire il controllo a quella chiamante, quando avrà incontrato il carattere nullo di terminazione della stringa.

Io l'ho svolto in questo modo:
#include <stdio.h>

void string_reverse(const char str[], int y);

int main()
{
    char stringa[] = "ciao mondo";
    int i = 0;
    
    printf("\n");
    string_reverse(stringa, i);
    printf("\n\n");
    return 0;
}

void string_reverse(const char str[], int y)
{
    if(str[y] == '\0')
       return;
    string_reverse(str, y + 1);
    printf("%c", str[y]);   
}
Il codice funziona ma non sono riuscito a rispettare la traccia poichè ho passato alla funzione una variabile oltre il vettore di caratteri. Sapreste dirmi come fare? Ho provato ad inizializzare la variabile nella funzione stessa per scorrere i caratteri ma ovviamente viene inizializzata ad ogni chiamata e il codice non funzionerebbe.

Grazie

6 Risposte

  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    #include <stdio.h>
    
    void string_reverse(const char *str)
    {
        if(*str)
        {
            string_reverse(str + 1);
            printf("%c", *str);
        }
    }
    
    int main()
    {
        char str[] = "\n!odnom oaic";
        string_reverse(str);
        return 0;
    }
  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    Nippolo ha scritto:


    #include <stdio.h>
    
    void string_reverse(const char *str)
    {
        if(*str)
        {
            string_reverse(str + 1);
            printf("%c", *str);
        }
    }
    
    int main()
    {
        char str[] = "\n!odnom oaic";
        string_reverse(str);
        return 0;
    }
    Grazie, solo sai come risolverlo o darmi un consiglio senza l'utilizzo dei puntatori? Questo esercizio si trova in un capitolo precedente a tale argomento che non ho ancora iniziato
  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    Così potrebbe andare?
    
    #include <stdio.h>
    
    void string_reverse(const char str[])
    {
        if(str[0])
        {
            string_reverse(str + 1);
            printf("%c", str[0]);
        }
    }
    
    int main()
    {
        char str[] = "\n!odnom oaic";
        string_reverse(str);
        return 0;
    }
    
  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    Weierstrass ha scritto:


    Così potrebbe andare?
    
    #include <stdio.h>
    
    void string_reverse(const char str[])
    {
        if(str[0])
        {
            string_reverse(str + 1);
            printf("%c", str[0]);
        }
    }
    
    int main()
    {
        char str[] = "\n!odnom oaic";
        string_reverse(str);
        return 0;
    }
    
    Va benissimo! solo non ho capito bene come funziona, o meglio, come funziona la condizione
    if(str[0])
    potresti spiegarmelo?
  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    Sono tutti modi diversi di scrivere la stessa cosa

    if(*str)
    if(*str != 0)
    if(*str != '\0')
    if(str[0])
    if(str[0] != 0)
    if(str[0] != '\0')
  • Re: [C] - Visualizza Stringa Capovolta Ricorsivamente

    Weierstrass ha scritto:


    Sono tutti modi diversi di scrivere la stessa cosa

    if(*str)
    if(*str != 0)
    if(*str != '\0')
    if(str[0])
    if(str[0] != 0)
    if(str[0] != '\0')
    Tutto chiaro, ho sempre esplicitato la condizione non sapevo che il linguaggio imponesse la condizione diversa da zero se non viene esplicitata dal programmatore. Grazie ancora.
Devi accedere o registrarti per scrivere nel forum
6 risposte