我有几个数组:
const string a_strs[] = {"cr=1", "ag=2", "gnd=U", "prl=12", "av=123", "sz=345", "rc=6", "pc=12345"};
const string b_strs[] = {"cr=2", "sz=345", "ag=10", "gnd=M", "prl=11", "rc=6", "cp=34", "cv=54", "av=654", "ct=77", "pc=12345"};
然后我需要解析出“=”,然后将值放入结构中。 (rc key映射到struct中的fc key),形式为:
struct predict_cache_key {
pck() :
av_id(0),
sz_id(0),
cr_id(0),
cp_id(0),
cv_id(0),
ct_id(0),
fc(0),
gnd(0),
ag(0),
pc(0),
prl_id(0)
{ }
int av_id;
int sz_id;
int cr_id;
int cp_id;
int cv_id;
int ct_id;
int fc;
char gnd;
int ag;
int pc;
long prl_id;
};
我遇到的问题是数组不按顺序或与结构字段的顺序相同。所以,我需要检查每一个,然后想出一个方案将它们放入结构中。
使用 C 或 C++ 解决上述问题有什么帮助吗?
最佳答案
可能我没有理解正确,但显而易见的解决方案是将每个数组元素拆分为 key
和 value
然后写 lo-o-ong if-else-if-else ...
序列如
if (!strcmp(key, "cr"))
my_struct.cr = value;
else if (!strcmp(key, "ag"))
my_struct.ag = value;
...
您可以在 C 预处理器的帮助下自动创建此类序列,例如
#define PROC_KEY_VALUE_PAIR(A) else if (!strcmp(key,#A)) my_struct.##A = value
因为前导 else
你这样写代码:
if (0);
PROC_KEY_VALUE_PAIR(cr);
PROC_KEY_VALUE_PAIR(ag);
...
唯一的问题是你们中的一些结构字段有 _id
后缀 - 对于它们你需要创建一个有点不同的宏来粘贴 _id
后缀
关于c++ - 初始化结构,使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286402/