Quote:
Originariamente inviato da cionci
Anche la nuova allocazione è sbagliata:
*y=new char[30];
l'asterisco non ci vuole.
y a in questo caso a cosa ti serve ? Per cercare nel map ? Cosa vuoi mettere in y: un solo carattere o una serie di caratteri, sinceramente non riesco a capire.
Fammi un esempio con dei valori.
|
dunque, nella parte di algoritmo che non ho postato (e prefirei non postare dato che è per un esame), legge un file, calcola le frequenza di apparizione dei caratteri, e crea la mappa delle codifiche
mettiamo io abbia compresso la parola "portata", con questa codifica
char string freq
p 111 1
o 110 1
r 00 1
t 01 2
a 10 2
ora devo riottenere dal file dove ho salvato la parola codificata
111 110 00 01 10 01 10 (senza spazi, li ho messi per far capire meglio)
il file d'origine. Per questo tento disperatamente di cercare i valori (stringhe) nella mappa, al posto delle chiavi, perchè, nel while, dovrebbe leggere il primo 1 della p, passare avanti e copiare accodare il secondo 1 della p al primo, passare avanti, accodare il terzo 1 della p e finalmente, ricoscere la stringa 111 e scrivere la p sul file di destinazione.
Se non si puo' usare una mappa al contrario cosa consigli? Io all'inizio avevo pensato di usare 2 array globali al posto della mappa, ma la mappa faceva piu' figo
Dovrei fare molte correzioni se usassi gli array, non c'è una soluzione?
E' un progetto per un'esame, allora capirai che sono propenso all'utilizzo di un buon numero di costrutti studiati a lezione, come la stl.
La cosa strana, di questo algoritmo è appunto il salvataggio tramite stringhe, dei vari 0 e 1, che porta a fare confusione, perchè nel file di destinazione per la compressione, e quindi di lettura per la decompressione, ogni 0 e 1 è un byte, non un bit!!! Ho deciso per questa soluzione in quanto era di piu' facile realizzazione (dietro c'è la creazione dell'albero di Huffman e relativa assegnazione di 0 e 1 al percorso dell'albero radice-foglia)