我一直致力于一个开源项目,致力于清理它的数据库处理。在大多数地方,工作进展顺利,但在一个涉及自定义查询的字符串操作的特定区域中,代码一直很难看。
我们需要做的主要是在运行时使用分隔符多次连接查询的特定组件。
目前正在进行的方式是设置一个计数器,循环检查一个值的特定集合,如果我们有这个值,我们将“(%i,%i)”附加到初始查询字符串然后设置附加状态标志,从那时起,我们追加“,(%i,%i)”这是有效的,但代码最终会有这个奇怪的,如果然后在循环中构造一个标志只是因为我们需要“,”分隔符之后最初的追加。
使用某种类似于pythons的连接系统会更好。“,join。唯一的问题是字符串不在数组/向量中,但是在运行时找到,并且要追加的字符串是常量。
有关如何处理此问题的任何建议?
https://github.com/addtheice/Server/blob/master/zone/tasks.cpp#L805-L867
基于第一次出现行为的此类附加的一个示例。这实际上是其中一个更清晰的版本。
答案 0 :(得分:2)
它可能不是最有效的方式,但我发现我的代码经常以这种模式结束:
std::stringstream ss
for( int i = 0; i < numberOfStrings; i++ )
ss << ( i ? "," : "" ) << GetString(i);
std::string result = ss.str();
答案 1 :(得分:0)
如何在索引1而不是0处启动循环? 改编自您的代码:
char *buf = 0;
MakeAnyLenString(&buf, "(%i, %i)", CharID, TasksEnabled[0]);
TaskQuery += buf;
safe_delete_array(buf);
for(unsigned int i=1; i<TasksEnabled.size(); i++) {
MakeAnyLenString(&buf, ",(%i, %i)", CharID, TasksEnabled[i]);
TaskQuery += buf;
safe_delete_array(buf);
}