我一直在研究一个开源项目,负责清理数据库的处理。在大多数地方,工作进展顺利,但在一个涉及自定义查询字符串操作的特定领域,代码一直很难看。C++和字符串连接分隔符
我们需要做的事情基本上是在运行时使用分隔符多次连接查询的特定组件。
它目前正在做的方法是设置一个计数器,遍历一组特定的检查值,如果我们有这个价值,我们追加“(%I,%I)”初始查询字符串,然后设置追加状态标志,然后我们追加“,(%i,%i)”这个工作,但是如果在循环中用一个标志构造一个标志,代码就会变得很奇怪,因为我们需要这个“,”分隔符最初的追加。
有一种类似于pythons的连接系统会更好,“join”构造。唯一的问题是字符串不在数组/矢量中,而是在运行时找到,并且要附加的字符串是常量。
有关如何处理此问题的任何建议?这种类型的附加的基于第一次出现的行为
https://github.com/addtheice/Server/blob/master/zone/tasks.cpp#L805-L867
一个例子。这实际上是这个可悲的更清洁的版本之一。
示例代码请关于目前正在做什么。对不起,这只是帮助我思考。 – AndyG 2014-10-08 19:45:30
“唯一的问题是字符串不在数组/矢量中,而是在运行时找到”。并存储在什么?如果你可以将它们放入可以迭代的_anything_(它不一定是内存集合;查看'istream_iterator'就可以得到一个简单的例子),那么你可以使用类似'boost :: algorithm :: join '在上面,或者很容易地编写你自己的等价物。 – abarnert 2014-10-08 19:51:32
要追加的字符串是恒定的(或者是“(%i,%i)”或者“,(%i,%i)”,取决于它是否是第一个被添加的)。 如果要追加或不在运行时由数组内的某个值确定。 这就是为什么我不能只使用一些“,”。连接(迭代)结构像Python一样。我没有可迭代的集合,我有一个项目集合和一个常量字符串,我可能会或可能不会追加,第一个必须没有“,”之前和其他所有的字符串。 – 2014-10-08 19:54:35