Array di stringhe c

di il
8 risposte

Array di stringhe c

Salve qualcuno potrebbe spiegarmi meglio gli array di stringhe in c, o inviare un pezzo di codice dove vengono usati.
Mi servono sopratutto chiarimenti per il passaggio a funzione di esssi.

8 Risposte

  • Re: Array di stringhe c

    Il prototipo di default del main di un programma in C è int main(int argc, char** argv) oppure l'equivalente int main(int argc, char* argv[]).
    Come fai a non trovare esempi sull'argomento? Prova a informarti un po', poi casomai torna con un problema specifico
  • Re: Array di stringhe c

    Ciao, le stringhe in C sono, grossolanamente, array di char dove la posizione del carattere speciale "\0" ne indica la fine.
    Per avere un array contenente stringhe ti serve quindi un array bidimensionale: una dimensione per le lettere delle stringhe e l'altra per le stringhe.

    Al volo ti lascio uno spezzone di codice che potrebbe aiutarti:
    
    void stampaParole(char *, int, int);
    
    int main(int argc, char* argv[]){
        char parole[4][20];
        int i=0;
        printf("Inserisci quattro parole:\n");
        for(i=0; i < 4; i++){
            scanf("%s", parole[i]);
        }
    
        printf("Parole inserite:\n");
        stampaParole(parole, 4, 20);
    }
    
    void stampaParole(char *parole, int n_parole, int max_lenght){
        int i=0;
        int j=0;
        for(i=0; i < n_parole; i++){
            j=0;
            while(*((parole+i*max_lenght) + j) != '\0' && j < max_lenght){
                printf("%c", *((parole+i*max_lenght) + j) );
                j++;
            }
            printf("\n");
        }
    }
    
  • Re: Array di stringhe c

    maseratu1321 ha scritto:


    Salve qualcuno potrebbe spiegarmi meglio gli array di stringhe in c, o inviare un pezzo di codice dove vengono usati.
    Mi servono sopratutto chiarimenti per il passaggio a funzione di esssi.
    Queste sono cose che trovi sui libri, compresi gli esempi.

    Spiega cosa non hai capito e mostraci tu qualche pezzo di codice che non ti è chiaro ...
  • Re: Array di stringhe c

    Sh3dir ha scritto:


    Ciao, le stringhe in C sono, grossolanamente, array di char dove la posizione del carattere speciale "\0" ne indica la fine. [...]
    Bellissimo l'esempio!
    Mi spiegate questo codice: *((parole+i*max_lenght) + j)

    a) è un puntatore che dipende anche dalle variabili i e j.
    b) i determina la prima dimensione che corrisponde al numero di parole[0, 1, 2 3], e quindi punta alla parola (detto alla buona)
    c) j determina la seconda dimensione che corrisponde alla lunghezza della parola [0, 1, 2,3 ... 19] e quindi punta al carattere corrispondente. Se j è 2 e la parola è Lucia, punta a c.

    Ammesso che io abbia capito bene, comunque non mi è chiaro come salta fuori.

    Se qualcuno me lo potesse spiegare meglio gliene sarei garto!
  • Re: Array di stringhe c

    Ciao,
    per capire quel puntatore, disegna su un pezzo di carta un array bidimensionale: avrai colonne e righe.
    Ma fisicamente, in memoria gli array bidimensionali non vengono salvati in questa maniera ma linearmente, quindi prendi quella stessa tabella ed ora affianca tutte le righe, "trasformandola" in un array unidimensionale.
    Noterai che per identificare la riga, devi fare salti di "max_lenght" celle, quindi i*max_lenght.
    Una volta fatto questo salto, per trovare l'elemento che ti interessa devi sommare a questo valore la cella che ti interessa. ( + j)
    Hai bisogno di un punto di partenza però, la memoria è vasta e questo punto è il puntatore parole.
  • Re: Array di stringhe c

    oregon ha scritto:


    maseratu1321 ha scritto:


    Salve qualcuno potrebbe spiegarmi meglio gli array di stringhe in c, o inviare un pezzo di codice dove vengono usati.
    Mi servono sopratutto chiarimenti per il passaggio a funzione di esssi.
    Queste sono cose che trovi sui libri, compresi gli esempi.

    Spiega cosa non hai capito e mostraci tu qualche pezzo di codice che non ti è chiaro ...
    Non ho ben capito come inserire le stringhe in un array bidimensionale dichiarato come *array[].
    questo e' il codice dell'esercizio che stavo provando a fare:
    
    #include<stdio.h>
    #include<string.h>
    void stampa(char *array[], int c);
    int main(void){
    int quanti;
    int i=0;
    printf("Quante parole vuoi inserire?\n");
    scanf("%d",&quanti);
    char *array[quanti];
    for(i; i<quanti; i++){
    printf("Inserisci parola:\n");
    scanf("%s",array);
    scanf("%*[^\n]");
    scanf("%*c");
    }
    stampa(array,quanti);
    }
    void stampa(char *array[],int c){
    for(int i=0; i<c; i++){
    printf("%s\n",array);
    }
    }
  • Re: Array di stringhe c

    Io, riprendendo l'esempio postato prima, ho fatto così:
    #include<stdio.h>
    #include<string.h>
    void stampaParole(char *, int, int);
    
    int main(void){
    int quanti;
    int i=0;
    printf("Quante parole vuoi inserire?\n");
    scanf("%d",&quanti);
    char array[quanti][20];
    
    for(i=0; i<quanti; i++){
    printf("Inserisci parola:\n");
    scanf("%s",array[i]);
    }
    stampaParole(array,quanti, 20);
    }
    void stampaParole(char *parole, int n_parole, int max_lenght){
        int i=0;
        int j=0;
        for(i=0; i < n_parole; i++){
            j=0;
            while(*((parole+i*max_lenght) + j) != '\0' && j < max_lenght){
                printf("%c", *((parole+i*max_lenght) + j) );
                j++;
            }
            printf("\n");
        }
    }

    maseratu1321 ha scritto:


    oregon ha scritto:


    maseratu1321 ha scritto:


    Salve qualcuno potrebbe spiegarmi meglio gli array di stringhe in c, o inviare un pezzo di codice dove vengono usati.
    Mi servono sopratutto chiarimenti per il passaggio a funzione di esssi.
    Queste sono cose che trovi sui libri, compresi gli esempi.

    Spiega cosa non hai capito e mostraci tu qualche pezzo di codice che non ti è chiaro ...
    Non ho ben capito come inserire le stringhe in un array bidimensionale dichiarato come *array[].
    questo e' il codice dell'esercizio che stavo provando a fare:
    
    #include<stdio.h>
    #include<string.h>
    void stampa(char *array[], int c);
    int main(void){
    int quanti;
    int i=0;
    printf("Quante parole vuoi inserire?\n");
    scanf("%d",&quanti);
    char *array[quanti];
    for(i; i<quanti; i++){
    printf("Inserisci parola:\n");
    scanf("%s",array);
    scanf("%*[^\n]");
    scanf("%*c");
    }
    stampa(array,quanti);
    }
    void stampa(char *array[],int c){
    for(int i=0; i<c; i++){
    printf("%s\n",array);
    }
    }
  • Re: Array di stringhe c

    Spiegazione straordinariamente chiara!!!

    Sh3dir ha scritto:


    Ciao,
    per capire quel puntatore, disegna su un pezzo di carta un array bidimensionale: avrai colonne e righe.
    Ma fisicamente, in memoria gli array bidimensionali non vengono salvati in questa maniera ma linearmente, quindi prendi quella stessa tabella ed ora affianca tutte le righe, "trasformandola" in un array unidimensionale.
    Noterai che per identificare la riga, devi fare salti di "max_lenght" celle, quindi i*max_lenght.
    Una volta fatto questo salto, per trovare l'elemento che ti interessa devi sommare a questo valore la cella che ti interessa. ( + j)
    Hai bisogno di un punto di partenza però, la memoria è vasta e questo punto è il puntatore parole.
Devi accedere o registrarti per scrivere nel forum
8 risposte