Pregunta

¿Hay alguna manera simplemente cómo crear un caso insensible (String -> String)? Glib Tabla Hash

El resultado debe adaptarse a esto:

GHashTable *table;
//there should be definition of table

g_hash_table_insert(table, "KeY", "Something"); //insert

//every command should return the line in table
g_hash_table_lookup(table, "Key");
g_hash_table_lookup(table, "KEY");
g_hash_table_lookup(table, "key");
g_hash_table_lookup(table, "KeY");

Creo que el problema es sólo en la definición de la función hash y la función comparement. Sin embargo, no sé qué funciones que debe utilizar.

¿Fue útil?

Solución

¿Por qué no acaba de transformar la clave usando algo como tolower()? De esta manera la clave es estándar, y por lo tanto su tabla hash será demasiado.

Otros consejos

Proporcionar sus propias funciones de igualdad y hash para g_hash_table_new, en lugar de g_str_equal y g_str_hash.

Probablemente la forma más fácil de escribir el hash es tomar una copia de la fuente de g_str_hash, pero en la lectura de cada char, empujarlo a minúsculas antes de continuar. Pero hay cualquier número de algoritmos hash cadena que puede utilizar, simplemente adaptar uno para asegurarse de que dos cadenas que se diferencian solamente por caso resultarán en el mismo valor hash.

Mientras usted sólo tendrá que preocuparse acerca de cadenas de caracteres ASCII, casi se puede (pero no del todo) g_ascii_strcasecmp utilizar para la función de la igualdad. Es necesario ajustar el valor de retorno. Si quieres apoyar un conjunto de caracteres más grandes, utilizar una comparación entre mayúsculas y minúsculas para ese conjunto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top