Laboratorio di Programmazione. AA 2006/07.
Esercitazione n. 8

Scopo di questa esercitazione è di familiarizzarsi con i puntatori, array e stringhe.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.
I prototipi delle function di libreria per operare sulle strighe risiedono nel file di header string.h.Per utilizzare malloc invece è  necessario il file di header  stdlib.h.


     
  1. Modificare opportunamente il programma usato per ordinare una sequenza di numeri (bubblesort) in modo da poterlo impiegare sotto forma di function per ordinare sequenze di stringhe secondo l' ordine lessicografico (quello del dizionario).Suggerimento: per il confronto tra stringhe e per lo scambio, utilizzare le function di libreria strcmp e strcpy la cui modalita' di utilizzo e' reperibile mediante il comando man.

  2. La function strtok  ha  il prototipo   char *strtok(char *s, const char *delim);   La function permette di "spezzare"  la  stringa primo argomento in sottostringhe (token)  mediante la specifica di un insieme di caratteri di separazione mediante la seconda stringa argomento. Se il primo argomento e' la costante NULL, la ricerca della sottostringa si intende effettuata sulla stringa primo argomento della precedente chiamata a strtok con primo argomento diverso da NULL.  Ad ogni successiva chiamata con primo argomento NULL,  la ricerca inizia dall' ultima posizione raggiunta nella stringa. La stringa contenente i delimitatori puo' essere cambiata da una chiamata alla successiva.
    Esempio:
    #include <stdio.h>
    #include <string.h>
    int main(void)

    {

    char *token;
    char line[] = "...Linea esempio.Che non e' troppo lunga. Forse.";
    char *search = " .";

    token = strtok(line, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    return 0;
    }
    Modificare l' esempio in modo da estrarre tutti i token separati dal solo punto copiando le stringhe corrispondenti ad ogni token, ciascuna su una diversa componente di un array di stringhe (dichiarare l' array di stringhe come un array di puntatori a carattere).

  3. Data una struttura dati così  definita:
     struct scheda
    { char *autore;
    char *titolo;
    int anno;
    };
    allocare dinamicamente memoria per una variabile del tipo struct scheda ed inizializzarla, contestualmente alla dichiarazione, mediante i valori "Dennis Ritchie" (autore), "Il mio primo programma C" (titolo), 1972 (anno). Scrivere quindi i valori dei 3 campi su schermo.

  4. Nel programma precedente, lasciare la sola dichiarazione e inizializzare i tre campi mediante assegnazione (il campo anno) e usando la funzione strcpy (vedi man per l' utilizzo) per le due stringhe.

  5. Rifare l' esercizio precedente usando, al posto della variabile di tipo struct scheda, un puntatore allo stesso tipo dati.