我有一个格式为
"SERVERID=12345\nSERVERKEY=asdasw\nSERVERAPPID=123213\n"
我已经使用
strtok()
逐行对此进行了解析。有没有一种方法可以使每一行的键值对?像将它们存储在某种数组中一样?我的意思是,如果我要
SERVERID
,我只说Array['SERVERID']
,它将返回12345
作为值。有没有办法用C做到这一点? 最佳答案
标准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。