0

好的,我承认字符串操作在 C++ 方面从来都不是我的强项,尽管我在各种情况下仅通过使用 Boost 就取得了相当大的成功,但我仍然遇到一些问题。

所以,这就是我需要的(这个例子很精确)......


输入是:

position fen <arg_a1> <arg_a2> ... <arg_aN> moves <arg_b1> <arg_b2> ... <arg_bN>

(好吧,对于那些熟悉该主题的人来说,这是UCI协议的命令)

我想做的就是:

  • <arg_a1> <arg_a2> ... <arg_aN>(包括空格)放入一个字符串(即和之间的字符串positionmoves
  • <arg_b1> <arg_b2> ... <arg_bN>进入另一个字符串(即从moves直到结束的字符串)。

我玩了很多,Boost::split但显然这很像strtok(接受字符不是字符串分隔符)。

我该怎么做呢?解决这个特定问题的最简单方法是什么,而不需要我重新发明轮子(我倾向于这样做......经常......哈哈)?

提示:显然我可以做到。但我现在能想到的都是丑陋的。我正在寻找的是一种 C++ 友好的方式......

4

1 回答 1

0

这是解决方案(带有一些数字技巧):

    // where are 'fen' and 'moves' within the initial string?
    int fenPos = input.find("fen");
    int movesPos = input.find("moves");

    // get the exact string but taking into account the position of our initial tokens
    // as well as their length (e.g. fenPos.length()+1 = 4, etc)
    string fen = input.substr(fenPos+4,movesPos-fenPos-5);
    string moves = input.substr(movesPos+6);

所以对于输入:

"position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves f2f3 e7e6 g2g4",这将返回:

fen   = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
moves = "f2f3 e7e6 g2g4"
于 2013-01-21T03:40:36.670 回答