C stringy

Miroslav Mraz mrazik na volny.cz
Pátek Říjen 12 20:22:04 CEST 2018


Záleží na tom jak moc si s tím chcete pohrát. Pokud je ta tabulka předem 
daná a poměrně malá (desítky položek), můžete zkusit například
https://en.wikipedia.org/wiki/Pearson_hashing .
V tabulce pak máte místo stringu hash, tj. číslo (1 byte), můžete jí 
podle něj setřídit a pak vyhledávat třeba bisekcí. Nebo pokud se vám 
vejde 256 položek, použít hash hledaného stringu přímo jako index do 
tabulky.
Je to ale docela dost práce a blbě se do toho přidávají nové položky. Na 
druhou stranu je to dost rychlé.

Mrazík

Dne 12.10.2018 v 15:13 Michal Grunt napsal(a):
> Mám takovouto tabulku:
> 
> #include </usr/include/linux/input.h>
> 
> typedef struct {
>      char *name;
>      int   value;
> } dict;
> 
> dict keyTable[] = {
>      { "RESERVED", KEY_RESERVED },
>      { "ESC", KEY_ESC },
>      { "1", KEY_1 },
>      { "2", KEY_2 },
>      { "3", KEY_3 },
>      { "4", KEY_4 },
>      { "5", KEY_5 },
>      { "6", KEY_6 }
> ....
> };
> 
> Mám svojí proměnou (string) kde mám např. "ESC" a teď potřebuji z té
> tabulky nějak dostat, že "ESC" je KEY_ESC. Třeba takto nebo ještě
> nějak jinak?
> 
> for (i = 0; i < pocet_poloze_v_tabulce; i++)
> if (strcmp(keyTable[i].name, mujstring) == 0) break;
> 
> tohle_hledam = keyTable[i].value;
> 
> MG


Další informace o konferenci Hw-list