Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69

    [c] Confrontare array

    Salve, dovrei scrivere un programma che determini quante volte una parola, inserita dall'utente, sia presente in un array preinizializzato. Se la parola è presente, una o più volte deve essere cancellata rendendo NULL il rispettivo puntatore. E alla fine dovrei stampare per ogni parola presente l'indirizzo della parola, l'indirizzo del puntatore alla parola e la parola stessa. Se invece la parola è stata cancellata devo stampare solo l'indirizzo del puntatore alla parola cancellata.

    Procedo così

    //prototipi::
    void legge(char []); //per leggere la parola che l'utente vuole cercare
    void cerca(char *[], char [], int [], int *[]); //per cercare la parola immessa nell'array
    void cancella(char *[], int [], int);

    main()
    {
    //inizializzo un array di parole
    char *data[8]= {"tazza","chiodo","luce","sedia","luce","tappo","p enna","luce"};
    char word[20];
    int address[8]={0} //array che contiene gli indirizzi delle parole
    int num_parole;

    leggi(word]);
    cerca(data,word,address,&num_parole);
    cancella(data,address);
    stampa(data,address,num_parole);

    }

    //FUNZIONE LEGGO
    void legge(char parola[])
    {
    printf("inserisci una parola: ");
    scanf("%s", parola);
    }

    //FUNZIONE CERCA E qua so cavoli (almeno per me)
    void cerca( char *data[], char parola[], int address[], int *num)
    {
    int i;
    for(i=0, i<8; i++)
    {
    //domanda 1: come si confrontano gli array??
    if( *data[i] = parola)
    address[i]= 1;
    //domanda 2: A che serve quel puntatore ad int??
    }

    //FUNZIONE CANCELLA
    void cancella(char *data[], int address[])
    {
    int a;
    for(a=0, a<8; a++)
    {
    if (address[a]==1)
    *data[a]= NULL;
    }
    }

    //FUNZIONE STAMPA
    void (char *data[], int address[], int num)
    {
    printf("%s%-13s\n\n", "INDICE", "PAROLA");
    int i;
    num=0;
    for(i=0; i<8; i++)
    {
    if(address[i]==0)
    printf("%d%-13s\n", address[i], *data[i]);
    else
    if(address[i]==1)
    {
    printf("%d"%-13s%-6d\n", address[i], "-----",num);
    ++num;
    }
    }
    }

    E' evidente che ho implementato le funzioni nella maniera sbagliata, se qualche anima paziente può darmi una mano nel sanare le lacune, gliene sarei immensamente grato.


    Il programma in questione dovrebbe agire così: Se inserisco per esempio luce, num_parole è 3 mentre address[0]=0, address[1]=0, address[2]=1,address[0] etc.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma perche' e' evidente?

    Se hai errori o malfunzionamenti, perche' non li elenchi rendendo piu' facile il compito di chi vuole aiutarti?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    E' evidente perchè il prototipo della funzione cerca riceve 4 argomenti mentre io ne utilizzo 3 non avendo capito il senso del 4 elemento (il puntatore ad array) e poi perchè non sono sicuro che il metodo che ho utilizzato per confrontare gli array sia esatto. Inoltre l'esercizio include anche la libreria string.h e non ho capito perchè

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    mi spiegate per lo meno come si fa un confronto tra elementi di array stringhe

    int i
    char *data[3]={"ciao", "blu","rosso","giallo"}
    char array2[5];

    scanf("%s", array2);
    for (i=0; i<4;i++)
    {
    if (data[i]==array2)
    printf("trovata.\n")
    }

    se faccio così il compilatore non mi da errori, ma la funzione non svolge il suo compito. Come posso fare???

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non devi usare l'operatore == per confrontare il contenuto di una stringa perche' non fai altro che confrontare il valore dei due puntatori e non dei caratteri.

    Usa la funzione stringa strcmp (o altre funzioni simili ...) per fare il confronto ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.