PDA

Visualizza la versione completa : [C] Ricerca di valori in dizionario


felx
21-07-2018, 18:17
Salve a ,tutti ragazzi ho questo esercizio:
Creare i file dictionary.h e dictionary.c che consentano di utilizzare le seguenti strutture:

struct pair {
char key[256];
char value[256];
};
struct dictionary {
size_t size;
struct pair *data;
};
e la funzione:

extern char *find(const struct dictionary *dict, const char *key);

La struttura pair permette di memorizzare una coppia chiave-valore dove entrambi gli elementi sono costituiti da stringhe di al massimo 256 caratteri (terminatore compreso). La struttura dictionary invece permette di memorizzare un vettore di pair.
La funzione accetta in input un puntatore a una struct dictionary e una stringa C e deve cercare nel dizionario una pair avente come chiave una stringa uguale a quella passata nel parametro key e ritornare il puntatore all’elemento trovato.
La funzione ritorna NULL se almeno uno dei due parametri è NULL o se non viene trovato nessun elemento che ha la chiave cercata. Tutte le chiavi del dizionario sono uniche.


Ciò che mi manda in panne è la ricerca di questo valore
avendo una struct dict come costante come faccio ad incrementare il puntatore *data in modo che punti alla struttura successiva in modo da controllare il valore?
Devo dichiarare una struttura di tipo pair temporanea?
io ho creato questo codice che non mi da il risultato corretto, sapreste delucidarmi?

leggi_linee.h
#ifndef Header
#define Header
#include<stdlib.h>
#include<stdio.h>
extern char **leggi_linee(const char *filename);
#endif // !Header


leggi_linee.c
#include"dictionary.h"
extern char *find(const struct dictionary *dict, const char *key)
{
char *ret=malloc(256*sizeof(char);
for (size_t i = 0; i < dict->size; i++) {
if (strcmp(*key, dict->data->key[i]))
ret = &(dict->data)->key[i];

return ret;
}
}

oregon
21-07-2018, 18:44
Stai sbagliando ... devi usare

dict->data[i]->key

felx
21-07-2018, 19:49
Stai sbagliando ... devi usare

dict->data[i]->key
Mi dice che l'espressione deve essere di tipo puntatore se uso il tuo metodo

oregon
22-07-2018, 08:24
Scusami intendevo

dict->data[i].key

ma devi avere allocato correttamente l'elemento data della struttura.

Mostra il codice con l'allocazione.

Loading