PI-ITBA / 2024_01

8 stars 0 forks source link

phrasesADT #386

Closed JuaniRaggio closed 3 months ago

JuaniRaggio commented 3 months ago

Realice las funciones put y copys que son para agregar un texto que puede ser muy extenso pero me fallan


#define BLOCK 100

struct phrase{
    char * txt;
    size_t length;
        size_t allocated;
};

struct phrasesCDT{
    size_t keyFrom;
    size_t keyTo;
    struct phrase * key;
    size_t usedKeys;
};

void copys(phrasesADT p, size_t key, const char * phrase){
    if(p->key[key].length == 0)
        p->usedKeys++;
    int i = 0;
    while(phrase[i] != '\0'){
        if(p->key[key].allocated == i){
            p->key[key].allocated += BLOCK;
            p->key[key].txt = realloc(p->key[key].txt, p->key[key].allocated);
        }
        p->key[key].txt[i] = phrase[i];
        i++;
    }
    p->key[key].txt[i] = '\0';
    p->key[key].length = i - 1;
}

/*
* Agrega una frase. Si la clave key es inválida retorna 0, sinó retorna 1 (uno)
* Si ya hay una frase asociada a la clave, actualiza la frase almacenada,
* reemplazándola por el parámetro phrase.
* Se almacena una copia de la frase.
*/
int put(phrasesADT ph, size_t key, const char * phrase){
    if(ph->keyFrom > key || ph->keyTo < key)
        return 0;
    key = key-ph->keyFrom;
    copys(ph, key, phrase);
    return 1;
}