当前位置:  开发笔记 > 编程语言 > 正文

使用数组初始化struct

如何解决《使用数组初始化struct》经验,为你挑选了1个好方法。

我有几个数组:

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键映射到结构中的fc键),其形式为:

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;
};

我遇到的问题是数组不是与struct字段顺序或顺序相同.因此,我需要检查每个,然后想出一个方案,将相同的结构放入结构中.

有什么帮助使用C或C++来解决上述问题?



1> qrdl..:

也许我没有正确地得到它,但显而易见的解决方案是将每个数组元素拆分成keyvalue,然后写LO-O-翁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后缀

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有