L'algoritmo più efficiente sarebbe quello di costruire prima una macchina a stati finiti che a) riconosce una delle tue chiavi, e b) ha uno stato finale diverso per ogni chiave, i. e. producendo l'indice della chiave che è stata riconosciuta.
Parte a) è facile come chiamare correttamente regcomp()
. Sfortunatamente, questo non produrrà l'indice di cui hai bisogno subito (parte b)), ti fornirà solo la posizione iniziale e finale della stringa riconosciuta.
Quindi, a meno che non vogliate affrontare il problema di reimplementare una routine di compilazione regolare, immagino che la vostra migliore scommessa sia quella di cercare successivamente la chiave da una tabella hash. Tuttavia, ancora una volta è difficile utilizzare un'implementazione standard della tabella hash senza attivare l'allocazione della memoria passando la chiave come stringa. Certo, puoi provare a usare un hash perfetto per la ricerca. Ciononostante, qualsiasi compromesso che ti porti via da una macchina a stati finiti con le due proprietà a) eb) subirà un strong rallentamento.