gpt4 book ai didi

c++ - 根据另一个变量的内容打印一个变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:46 25 4
gpt4 key购买 nike

我有一个类似于下面的函数,它接受一个整数作为参数,并使用这个整数我想访问一个特定的变量。当然,我可以只使用 case/switch 语句或 if/else 进行 casebash,但这太脏了,我猜一定有某种形式的优雅解决方案。

static unsigned char frame1[] = {...};
static unsigned char frame2[] = {...};
/*...*/
static unsigned char frame30[] = {...};

int select_frame(int frame_number){
/* How can I use frame_number to select the correct frame variable without case/switch, if at all? */
}

我觉得好像可能有一个 stringstream 方法(或类似方法),但我不确定。有什么建议么?我很高兴看到使用 C 或 C++ 的解决方案。

编辑:我觉得我应该注意到这些数组中的大多数都将包含 500 多个单独的元素,因此将它们全部组合成一个巨大的数组变得有点不切实际。如果可能的话,我正在寻找一种避免这种方法的解决方案,尽管我目前正在认真考虑它。

最佳答案

如果您想基于整数访问其中一个帧,则只需将这些帧放入一个数组中即可:

static unsigned char* frames[30];

frames[0] = (unsigned char*)strdup("first frame's char");
frames[1] = (unsigned char*)strdup("second frame's char");

然后就可以直接高效的索引到frames[i]了。

在 C++ 中,更灵活的方法是使用 std::vector<std::string> (只要您的号码是连续的)甚至是 std::map<int, std::string> (如果你有带间隙的数字,或者想在运行时经常插入/删除单个元素,这很好。

编辑:从现有无符号字符数组创建字符串文字源代码的辅助函数(我脑子里乱七八糟,可能需要调整):

void f(std::ostream& os, unsigned char* p)
{
os << '"';
for ( ; *p; ++p)
{
if (*p < ' ' || *p >= 127)
os << '\\' << std::setw(3) << std::setfill('0') << std::oct << *p;
else if (*p == '\\')
os << "\\\\";
else
os << *p;
}
os << '"';
}

然后调用 f(frame1); f(frame2);等等……

关于c++ - 根据另一个变量的内容打印一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com