Trasformare una stringa

di il
102 risposte

102 Risposte - Pagina 5

  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    Ma qua perchè più c e non direttamente t[ i ]?
    È pseudocodice di un ciclo for each… non credo sia così un problema

    E comunque no, non sono 18 caratteri. 9 caratteri da sdoppiare e 1 terminatore…
  • Re: Trasformare una stringa

    Ho cominciato a contare da 0 io
  • Re: Trasformare una stringa

    Achille potresti dare un' occhiata e escape?
    
    void escape(char s[], char t[])
    {
        int i, j, c;
        for (i = 0, j = 0; i, j < strlen(t) - 1; i++)
        {
            switch (t[i]) {
            case '\t':
                s[j++] = '\\';
                s[j++] = 't';
            case '\n':
                s[j++] = '\\';
                s[j++] = 'n';
            default:
                s[j++] = t[i];
            }
        }
        s[j] = '\0';
    }
    
    é esattamente così che dovrebbe essere?
  • Re: Trasformare una stringa

    Ora è compilabile però non funziona benissimo in quanto dopo la tabulazione la parola che ho scritto non viene visualizzata
    
    #include <stdio.h>
    #include <string.h>
    void read_string(char s[], unsigned int dim);
    void escape(char s[], char t[]);//copia la stringa t in s
    //int strlen_fatta_in_casa(char str[]);
    
    void main()
    {
    	char t[10], s[30];
    	read_string(t, 10);
    	escape(s, t);
    	printf("%s", s); 
    }
    void read_string(char s[], unsigned int dim)
    {
        int c;
        unsigned int i;
        for(i = 0; i < dim - 1 && (c = getchar()) != EOF; ++i)
        {
            s[i] = c;
    
        }
        s[i] = '\0';
    }
    void escape(char s[], char t[])
    {
        int i, j, c;
        for (i = 0, j = 0; i < strlen(t) - 1, j < strlen(t) - 1; i++)
        {
            switch (t[i]) {
            case '\t':
                s[j++] = '\\';
                s[j++] = 't';
            case '\n':
                s[j++] = '\\';
                s[j++] = 'n';
            default:
                s[j++] = t[i];
            }
        }
        s[j] = '\0';
    }
    /*int strlen_fatta_in_casa(char str[])
    {
    	int i;
    	for (i = 0; str[i] != '\0'; ++i)
    		;
    	return i;
    }*/
    
  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    s[30]
    Ma sì, meglio abbondare!

    SuperManPC ha scritto:


    Ora è compilabile però non funziona benissimo in quanto dopo la tabulazione la parola che ho scritto non viene visualizzata
    Secondo te come viene valutata questa condizione che hai scritto?
    i < strlen(t) - 1, j < strlen(t) - 1
    P.S.
    Se fossi in te aggiungerei qualche break!
  • Re: Trasformare una stringa

    Grazie Nippolo! Comunque due cicli nidificati no vero(visto che ci vogliono 2 indici)?
  • Re: Trasformare una stringa

    Di niente, ma sarei curioso di vedere il codice finale!

    SuperManPC ha scritto:


    Comunque due cicli nidificati no vero(visto che ci vogliono 2 indici)?
    Non esiste alcuna regola fissa al riguardo, e nel caso specifico non vedo l'utilità di un secondo ciclo... d'altronde anche volendo cosa andresti a ciclare con un secondo ipotetico for?
  • Re: Trasformare una stringa

    Nippolo ha scritto:


    Di niente, ma sarei curioso di vedere il codice finale!

    SuperManPC ha scritto:


    Comunque due cicli nidificati no vero(visto che ci vogliono 2 indici)?
    Non esiste alcuna regola fissa al riguardo, e nel caso specifico non vedo l'utilità di un secondo ciclo... d'altronde anche volendo cosa andresti a ciclare con un secondo ipotetico for?
    Bho si infatti...
  • Re: Trasformare una stringa

    Per ora è questo...
    
    #include <stdio.h>
    #include <string.h>
    void read_string(char s[], unsigned int dim);
    void escape(char s[], char t[]);//copia la stringa t in s
    //int strlen_fatta_in_casa(char str[]);
    
    void main()//qua uso getchar e passo la stringa alla funzione
    {
    	char t[10], s[30];
    	read_string(t, 10);
    	escape(s, t);
    	printf("%s", s); 
    }
    void read_string(char s[], unsigned int dim)
    {
        int c;
        unsigned int i;
        for(i = 0; i < dim - 1 && (c = getchar()) != EOF; ++i)
        {
            s[i] = c;
    
        }
        s[i] = '\0';
    }
    void escape(char s[], char t[])
    {
        int i, j, c;
        for (i = 0, j = 0; i < strlen(t) - 1, j < strlen(t) - 1; i++)
        {
            switch (t[i]) {
            case '\t':
                s[j++] = '\\';
                s[j++] = 't';
            case '\n':
                s[j++] = '\\';
                s[j++] = 'n';
            default:
                s[j++] = t[i];
            }
        }
        s[j] = '\0';
    }
    
  • Re: Trasformare una stringa

    Non lo so come viene valutata : i < strlen(t) - 1, j < strlen(t) - 1
  • Re: Trasformare una stringa

    Perché non sostituirla con t[ i ] direttamente?

    Lo conosci l'operatore && ?

    E comunque se t ="X", ad esempio, strlen(t) = 1 e hai la condizione i < 1 - 1, cioè i < 0, cioè 0 < 0 che è falso e quindi esci dal for anche con &&
  • Re: Trasformare una stringa

    Semplicemente non va alcuna condizione su j. Nippolo ti ha fatto ragionare 20 post per capire la dimensione massima di s quindi j non eccederà mai quella.
    Anche perché che senso ha che pure j sia minore della lunghezza della stringa t, quando j è una variabile nata proprio per eccedere questo limite.

    A me sembra tu non abbia capito minimamente “l’algoritmo”, e queste condizioni a caso lo confermano…
  • Re: Trasformare una stringa

    _Achille ha scritto:


    Semplicemente non va alcuna condizione su j. Nippolo ti ha fatto ragionare 20 post per capire la dimensione massima di s quindi j non eccederà mai quella.
    Anche perché che senso ha che pure j sia minore della lunghezza della stringa t, quando j è una variabile nata proprio per eccedere questo limite.

    A me sembra tu non abbia capito minimamente “l’algoritmo”, e queste condizioni a caso lo confermano…
    Ma va ho solo sbagliato
  • Re: Trasformare una stringa

    _Achille ha scritto:


    A me sembra tu non abbia capito minimamente “l’algoritmo”, e queste condizioni a caso lo confermano…
    Cinque pagine di post su un codice banale, anche per uno studente che inizia a conoscere il linguaggio.

    Confermo che SupermanPC non ha idea dell'algoritmo né di quello che scrive. Ha bisogno di molto, molto più tempo sulle basi del linguaggio, ma intendo proprio le basi.
  • Re: Trasformare una stringa

    oregon ha scritto:


    _Achille ha scritto:


    A me sembra tu non abbia capito minimamente “l’algoritmo”, e queste condizioni a caso lo confermano…
    Cinque pagine di post su un codice banale, anche per uno studente che inizia a conoscere il linguaggio.

    Confermo che SupermanPC non ha idea dell'algoritmo né di quello che scrive. Ha bisogno di molto, molto più tempo sulle basi del linguaggio, ma intendo proprio le basi.
    Ma va per una condizione messa a caso che non ho tolto
Devi accedere o registrarti per scrivere nel forum
102 risposte