Newsgroup: it.comp.lang.c
Titolo: trasformare una stringa in una chiave...

Se ho una serie di parole da inserire in un albero come faccio ad associare
alla parola una chiave (quella su cui avviene al ricerca
nell'albero...).Pensavo di prendere ciascuna lettera a partire dal fondo
della stringa e moltiplicarla per la potenza di 10  relativa alla sua
posizione all'interno  della stessa...poi sommare il tutto...può andare?
Avete altri suggerimenti?
Grazie 1000!
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/

 andare? Avete altri suggerimenti?
no, cosi' hai una funzione di hash, non una chiave univoca
per una stringa, la chiave univaoca migliore e' la stinga stessa, in 
ordine lessicografico

Quindi utilizzo le mie funzioni dandogli la ricerca,cancellazione etc...
direttamente sulla stringa? Esatto?
Grazie1000


 etc... direttamente sulla stringa? Esatto?
per un albero di ricerca, si
se vuoi fare una hash table, va bene il tuo metodo (ma se non sai cosa 
sono, forse e' meglio che non le usi)

alla parola una chiave 
Perche' vuoi farlo ? non puoi usare la stringa stessa come
chiave ?
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

So cosa sono,  ma era proprio rivolto agli alberi.
Grazie 1000 per l'aiuto


E' un dubbio che ho avuto guardando le funzioni albero di "algoritmi in
C"...


C"...
Prova a dare uno sguardo a questo mio sorgente (compilato
con Borland C/C++ 5.5):
<CODE>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _nodo_albero {
               char *parola;
               int  occorrenze;
               struct _nodo_albero *sx, *dx;
        } nodo_albero, *pnodo_albero;
void bintree_inserisci( pnodo_albero *pradice, const char
*parola )
{
     if ( !*pradice )
     {
        *pradice = malloc( sizeof **pradice );
        (*pradice)->parola = malloc( strlen( parola ) + 1 )
;
        strcpy( (*pradice)->parola, parola ) ;
        (*pradice)->occorrenze = 1 ;
        (*pradice)->sx = (*pradice)->dx = 0 ;
     }
     else
     {
        int cmp = strcmp( parola, (*pradice)->parola ) ;
 
        if ( cmp < 0 ) bintree_inserisci( &(*pradice)->sx,
parola ) ;
        else
        if ( cmp > 0 ) bintree_inserisci( &(*pradice)->dx,
parola ) ;
        else
          ++(*pradice)->occorrenze ;
     }
}
int bintree_cerca( pnodo_albero radice, const char *parola )
{ 
    if ( radice )
    {
       int cmp = strcmp( parola, radice->parola ) ;
       if ( cmp == 0 )  
         return 1 ;
       else
       if ( cmp < 0 ) 
         return bintree_cerca( radice->sx, parola ) ;
       else
         return bintree_cerca( radice->dx, parola ) ;
    }
    else return 0 ;
}
void bintree_scrivi( pnodo_albero radice )
{
     if ( radice ) 
     { 
        bintree_scrivi( radice->sx ) ;
        printf( "%s, ", radice->parola ) ;
        bintree_scrivi( radice->dx ) ;
     }
}
void flushkbdbuff( void )
{ 
     while ( getchar() != '\n' ) ;
}
int main()
{
    const char *parole[] = { "libro", "barca", "zattera",
"armadio", 
                             "bottiglia", "dado", "cane" } ;
    char parola[1024] ; 
    pnodo_albero albero = 0 ;
    int i ;
    for ( i = 0 ; i < 7 ; i++ )
    {
        bintree_inserisci( &albero, parole[i] ) ;
    }        
    do
    {
       puts( "\n" );
       printf( "parole nell'albero: " ) ;
       bintree_scrivi( albero ) ;
       puts( "\n" );
       printf( "inserisci una parola (\"fine\" per uscire) :
" ) ; 
       scanf( "%s", parola ) ;
       flushkbdbuff();
       if ( bintree_cerca( albero, parola ) )
          puts( "PAROLA TROVATA" ) ;  
       else
          puts( "PAROLA NON TROVATA" ) ;
    } while (strcmp( parola, "fine" )) ;
    return 0 ;
}
</CODE>


Grazie 1000!
Ti chiedo ancora una cosa stupida...ma mi č venuto il dubbio...
in un  while(x!=z)
il ciclo finisce quando x assume il valore z o il valore precedente?
Grazie ancora!!!
Enrico


il ciclo finisce quando x assume il valore z o il valore precedente?
Quando assume il valore di z.
