C中的键值对?

时间:2018-07-03 05:01:37

标签: c parsing key-value keyvaluepair

我有一个格式为

的字符串
"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"

我已经使用strtok()逐行对此进行了解析。 有没有办法使每一行的键值对?像将它们存储在某种数组中一样?我的意思是,如果我想要SERVERID,我只说Array['SERVERID'],它将返回12345作为值。有没有办法用C做到这一点?

2 个答案:

答案 0 :(得分:1)

标准C不会为您提供所需的任何“容器类型”。仍然有几种方法可以解决您的问题:

  1. 听起来可能很傻,但是您可以切换到其他语言。至少要考虑一下。例如,想到了C ++,提供了std::map类型。

  2. 使用一些第三方库。流行的选择是GLib,它提供了您可以使用的hash table

  3. 总有可以自己实现的选项。一个非常简单的想法是使用结构数组,例如

    struct stringpair {
        char *key;
        char *value;
    };
    
    struct stringpair *table;
    
    // ...
    size_t entries = 42; // number of entries you found
    table = malloc(entries * sizeof *table); // check for NULL after this
    
    // look for an entry:
    char *value = 0;
    for (size_t i = 0; i < entries; ++i)
    {
        if (!strcmp(table[i].key, "SERVERID"))
        {
            value = table[i].value;
            break;
        }
    }
    

    这当然是非常的基本解决方案,并且在输入大量内容时效果不佳。我也没有测试此代码,只是为了给您一个大概的想法。如果需要快速查找,则需要实现哈希表,或者使用选项1或2。

答案 1 :(得分:0)

您在这里寻找的将是字典的形式。通常,但并非总是如此,它们使用哈希表。在C中创建哈希表的方法有很多

您可以在这里找到答案: What is a hash table and how do you make it in C?

您还可以看到其他实现,例如组合的数据结构,例如字典链接列表,等等。只需找到一种将字符串(char *)转换为数字的方法,然后找到一种使用该数字作为索引的方法。