【发布时间】:2013-01-21 01:18:40
【问题描述】:
好的,我承认字符串操作在 C++ 方面从来都不是我的强项,虽然我在各种情况下仅通过使用 Boost 就取得了相当大的成功,但我仍然遇到了一些问题。
所以,这就是我需要的(示例很准确)...
输入是:
position fen <arg_a1> <arg_a2> ... <arg_aN> moves <arg_b1> <arg_b2> ... <arg_bN>
(好吧,对于熟悉该主题的人来说,这是UCI协议的命令)
我只想:
- 将
<arg_a1> <arg_a2> ... <arg_aN>(包括空格)合并为一个字符串(即position和moves之间的字符串 - 还将
<arg_b1> <arg_b2> ... <arg_bN>放入另一个字符串(即从moves到结尾的字符串)。
我用Boost::split 玩了很多,但显然这很像strtok(接受字符 和不是字符串 分隔符)。
我应该怎么做?解决这个特定问题的最简单方法是什么,而不需要我重新发明轮子(我倾向于这样做......经常......哈哈)?
提示:显然我可以做到。但我现在能想到的都是丑陋的。我正在寻找的是一种 C++ 友好的方式...
【问题讨论】:
-
这看起来很简单。如果你知道
position和moves这两个词的确切位置,你会怎么做?现在,您将如何在输入字符串中找到这些单词的位置?我敢打赌,如果你把这两件事放在一起,一个可能的解决方案就会很清楚。 -
你可能想看到这个答案——stackoverflow.com/a/236803/701092
-
Greg 的评论 +1。除此之外,您应该使用
std::string函数来执行此操作 - 将其与提升拆分、正则表达式等复杂化并没有什么好处。 -
@GregHewgill 好吧,我绝对不知道为什么我必须由其他人阅读它,但你猜怎么着:它是通过两个简单的
::find和::substr语句解决的。出于某种奇怪的原因,它不再让我觉得丑了……哈哈。谢了哥们! ;-) -
@Dr.Kameleon 下一步:在下面回答您自己的问题,然后接受您的正确答案。
标签: c++ parsing boost split token