首页 > 解决方案 > C中的键值对?

问题描述

我有一个格式为的字符串

"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"

我已经使用strtok(). 有没有办法为每一行制作一个键值对?就像也许将它们存储在某种数组中?我的意思是,如果我愿意SERVERID,我只是说它Array['SERVERID']12345作为值返回。有没有办法在C中做到这一点?

标签: cparsingkey-valuekeyvaluepair

解决方案


标准 C 没有像您正在寻找的那样为您提供任何“容器类型”。您仍然有多种选择来解决您的问题:

  1. 可能听起来很傻,但你可以切换到不同的语言。这至少是值得考虑的事情。例如,想到 C++,提供std::map类型。

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

  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。


推荐阅读