4

おそらく誰かがここで何が起こっているのか教えてくれますか?

私の意図は、入力文字列を中括弧で分割することです。つまり、' 'または' 'のいずれかです。

「(well)hello(there)world」の入力文字列の場合、4つのトークンが返されることを期待しています。こんにちは; そこの; 世界

以下の模範的なアプリからわかるように、5つのトークンが返されます(1つ目は空の文字列です)。

空でない文字列のみを返すようにこれを取得する方法はありますか?

#include <iostream>
#include <boost/algorithm/string.hpp>
#include <vector>
int main()
{
    std::string in = "(well)hello(there)world";

    std::vector<std::string> tokens;
    boost::split(tokens, in, boost::is_any_of("()"));

    for (auto s : tokens)
        std::cout << "\"" << s << "\"" << std::endl;

    return 0;
}

出力:

$ a.out
""        <-- where is this token coming from?
"well"
"hello"
"there"
"world"

使ってみboost::algorithm::token_compress_onましたが、同じ結果になりました。

4

2 に答える 2

1

はい、最初に返される結果は、最初の開き括弧の直前の空のセット{}です。動作は期待どおりです。

その結果を使用したくない場合は、返された空の変数をテストして破棄します。

これが期待される動作であることをテストするには、行の最後に括弧を入れてください。最後に別の空の結果が表示されます。:)

于 2012-09-27T01:52:56.603 に答える
0

このスレッドはちょっと古いですが、これはより良い解決策ですboost::token_compress_on、デリメータの後にこれを追加してくださいboost::split

于 2016-05-29T13:47:17.843 に答える