2

コードに問題が見つかりました。boost::algorithm::join を使用すると正常に動作しますが、boost::algorithm::join_if を使用すると bad_cast がスローされます。私のコードは以下の通りです:

#include <iostream>
#include <string>
#include <list>
#include <boost/algorithm/string.hpp>

using namespace std;


main(int argc, char **argv)
{   
    list<string> players;
    players.push_back("ProPlayer98");
    players.push_back("King of Darkness");
    players.push_back("Noob999");
    players.push_back("Daily Queen");

    cout << boost::algorithm::join(players, ", ") << endl; // it works
    cout << boost::algorithm::join_if(players, ", ", boost::is_alpha()) << endl; // bad_cast
}

私のプログラムの出力は次のとおりです。

ProPlayer98, King of Darkness, Noob999, Daily Queen
terminate called after throwing an instance of 'std::bad_cast'
  what():  std::bad_cast
Abort trap (core dumped)

テキストを操作するために boost::algorithm 関数を使用したことが あり、 predicateを使用したことはほとんどありませんでしたが、そのような問題は発生しませんでした。

const char* を std::string に置き換えようとさえしました:

cout << boost::algorithm::join_if(players, string(", "), boost::is_alpha()) << endl;

しかし、問題はまだ同じです。

EDIT: C++ 11より古いC++でも機能するソリューションが欲しい

4

1 に答える 1

3

boost::is_alphaキャラクター用です

次のように使用します:-

cout << boost::algorithm::join_if(players, ", ",
                          [](const std::string & s){
                          return boost::all(s,boost::is_alpha()); 
                          }) << endl;

' 'ここでは明らかに、スペースと数字が に存在するため、出力は得られませんplayers

boost::alnum()代わりに使用してください。

于 2013-09-12T05:11:17.517 に答える