c++ - 初始化结构,使用数组

标签 c++ c parsing

我有几个数组:

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++ 解决上述问题有什么帮助吗?

最佳答案

可能我没有理解正确,但显而易见的解决方案是将每个数组元素拆分为 keyvalue 然后写 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/

相关文章:

c - 在堆栈上分配大小的字符串缓冲区的好方法是什么?

c - 如何针对内存使用优化 GCC 编译?

c++ - C++ 中的命名枚举

你能发现这段代码中的逻辑错误吗?计数

c++ - 为这个二进制节点类创建析构函数的正确方法是什么?

python - 仅匹配出现在解析字符串右半部分的元素

shell - 解析表达式语法是否适合解析 shell 命令语言?

c - 通过char数组中的token获取参数

c++ - 有没有Mac OSX版的windows GetFontData功能?

c++ - 以下任何配置是否会影响发布版本的性能