我有一个格式为
的字符串"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"
我已经使用strtok()
逐行对此进行了解析。
有没有办法使每一行的键值对?像将它们存储在某种数组中一样?我的意思是,如果我想要SERVERID
,我只说Array['SERVERID']
,它将返回12345
作为值。有没有办法用C做到这一点?
答案 0 :(得分:1)
标准C不会为您提供所需的任何“容器类型”。仍然有几种方法可以解决您的问题:
听起来可能很傻,但是您可以切换到其他语言。至少要考虑一下。例如,想到了C ++,提供了std::map
类型。
使用一些第三方库。流行的选择是GLib,它提供了您可以使用的hash table。
总有可以自己实现的选项。一个非常简单的想法是使用结构数组,例如
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 *)转换为数字的方法,然后找到一种使用该数字作为索引的方法。