将错误文本与C中的错误代码相关联

时间:2013-02-09 21:08:23

标签: c algorithm data-structures

我打算写一个函数,它应该将错误消息转换为错误代码。 所以我有一系列错误消息

const char *arr_error_message[] = 
{
    "Critical error",
    "Unexpected error",
    ...
}

和错误代码的枚举:

typedef enum error_code
{
    FIRST = 0,
    CRITICAL_ERROR = FIRST,
    UNEXPECTER_ERROR,
    ...
    LAST,
    NOT_FOUND_ERROR
} error_code_t;

,功能将是

error_code_t translate_error_code(const char *err)
{
error_code_t e = FIRST;
do
{
        if ( strcmp(arr_error_message[e], err) == 0 ) return e;
} while (++e != LAST);

return NOT_FOUND_ERROR;
}

函数实现的更有效方法是什么,有没有办法(技巧)来实现复杂度为O(1)的函数?

3 个答案:

答案 0 :(得分:0)

我认为这只是获得正确数据结构的问题。如果您希望能够从错误代码直接映射到字符串表示,您只需返回存储在相应数组索引中的错误代码:

return arr_error_message[err];

另一方面,如果要从错误消息映射到错误代码,可以考虑使用哈希表。由于您的错误代码集(可能)相对恒定,您可以考虑使用gperf tool to generate a perfect hash table,这样可以非常快速地将错误消息映射到错误代码。

希望这有帮助!

答案 1 :(得分:0)

如果您计划从错误代码中获取错误字符串,那么一个简单的数组就足以获得O(1)算法。

但是由于您需要来自错误字符串的错误代码,我所知道的最好的方法是使用哈希表来存储和检索节点。使用gnu gperf。

答案 2 :(得分:0)

这只是一个radix tree结构。 C实际上没有字符串,因此所有字符串比较都将是比较单个字符的循环。字符串都是常量。所以你不妨将字符串拆分成复合字符并从中手工构造树,然后一次遍历树一个字符。