2010-10-15 20 views
7

Estoy programando un microcontrolador en C y como parte de él quiero mostrar ciertas letras en una pantalla de 7 segmentos. Cada letra tiene un número correspondiente que hace que la pantalla de 7 segmentos muestre la letra. No existe un patrón real, ya que el número solo se obtiene al sumar los bits en la pantalla de 7 segmentos que se necesitan para mostrar la letra, por lo que sería muy bueno si pudiera crear algún tipo de diccionario para hacer esto.¿Cómo crear un diccionario en C?

Si estuviera usando C# o algo así, simplemente haría un diccionario y luego agregaría las letras como claves y los números como valores, pero hasta donde yo sé, no puedo hacer esto en C. ¿Hay alguna otra forma de hacerlo o hacer ¿debería escribir una función como int displayletter(char letter) que utiliza un montón de instrucciones if para devolver los números correctos?

Lo siento si es una pregunta estúpida, soy bastante nuevo en C.

+0

Busque una implementación de trie en C; a falta de eso, una tabla hash también podría funcionar. – leppie

Respuesta

6

Se podría crear una matriz

int values[26]; 

y rellenarla con los valores para cada letra, sin embargo, que están calculados

a continuación, crear una función que toma un carácter y devuelve un int

int GetValueFromChar(char c) 
{ 
    return values[c - 'A']; 
} 

Esto es simplista, ya que supone que solo usará letras mayúsculas en un conjunto de caracteres ASCII, pero debe entenderse.

+1

¿Qué sucede si la computadora está utilizando el juego de caracteres EBCDIC y no ASCII? – Swiss

+4

A menos que sea IBM en 1975, no será EBCDIC. –

+0

@Swiss: ese es un buen punto. Asumo un juego de caracteres ASCII, pero el mecanismo subyacente debería ser el mismo. He actualizado la respuesta para reflejar esa suposición. –

0

Lo más fácil sería simplemente usar una función y una declaración de cambio ... Creo que para este propósito, la instrucción de cambio sería muy eficiente. También considero que la biblioteca de Judy es buena para utilizarla para un mapeo eficiente, pero es un poco exagerada para esto.

Cuestiones relacionadas