2

「;」を取得するためにboost::tokenizerを使用しています からフィールドを分離しましたstring。以下のコードに示すようにフィールドを取得できますが、2 つの質問があります。

  1. 提供されたセパレーターに基づいて文字列内のトークンの数を知るためにトークナイザーが提供する関数はありますか?
  2. テスト文字列に 3 つのフィールドがあるとしますa;b;c。次のコードは、それらすべてを出力します。しかし、空のフィールドも印刷する必要があります。たとえば、文字列a;;;b;cの場合、トークンには2 番目と 3 番目の要素として何も含まれていない必要があります。つまり、2 番目と 3 番目のトークンは空にする必要があります。
#include <boost/tokenizer.hpp>
namespace std;
namespace boost;
int main()
{
    string data="a;;;;b;c";
    boost::char_separator<char> obj(";");
    boost::tokenizer<boost::char_separator<char> > tokens(data,obj);
    cout<<endl<<tokens.countTokens();
    for(boost::tokenizer<boost::char_separator<char> >::iterator it=tokens.begin();
    it!=tokens.end();
    ++it)
    {
        std::cout<<*it<<endl;
    }
}
4

1 に答える 1

7

1) end と begin の差を数えることができます。

const size_t count = std::distance(tokens.begin(), tokens.end());

2)セパレーターを正しく構築する必要があります。

boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);

実際の例

于 2015-10-29T12:48:41.920 に答える