C++ 使用boost::的多个分割令牌是任意的吗

C++ 使用boost::的多个分割令牌是任意的吗,c++,string,boost,stl,C++,String,Boost,Stl,我不确定如何使用boost::is_any_of使用一组字符分割字符串,其中任何一个字符都应该分割字符串 我想做这样的事情,因为我知道函数的is_any_接受一个设置的参数 std::string s_line = line = "Please, split|this string"; std::set<std::string> delims; delims.insert("\t"); delims.insert(","); delims.insert("|"); std:

我不确定如何使用
boost::is_any_of
使用一组字符分割字符串,其中任何一个字符都应该分割字符串

我想做这样的事情,因为我知道函数的is_any_接受一个设置的参数

std::string s_line = line = "Please, split|this    string";

std::set<std::string> delims;
delims.insert("\t");
delims.insert(",");
delims.insert("|");

std::vector<std::string> line_parts;
boost::split ( line_parts, s_line, boost::is_any_of(delims));
#include <string>
#include <set>
#include <vector>
#include <iterator>
#include <iostream>
#include <boost/algorithm/string.hpp>

int main()
{
    std::string s_line = "Please, split|this\tstring";
    std::string delims = "\t,|";

    std::vector<std::string> line_parts;
    boost::split(line_parts, s_line, boost::is_any_of(delims));

    std::copy(
        line_parts.begin(),
        line_parts.end(),
        std::ostream_iterator<std::string>(std::cout, "/")
    );

    // output: `Please/ split/this/string/`
}
std::string s_line=line=“请,拆分此字符串”;
标准:设置delims;
delims.插入(“\t”);
delims.插入(“,”);
delims.插入(“|”);
std::矢量线零件;
boost::split(line_parts,s_line,boost::是(delims)中的任意一个);
但是,这会产生boost/STD错误列表。 我应该坚持使用
是属于
还是有更好的方法,例如使用正则表达式拆分?

您应该尝试以下方法:

boost::split(line_parts, s_line, boost::is_any_of("\t,|"));

您的第一行不是有效的C++语法,没有预先存在的变量名“代码>行< /COD>,而 >不采用<代码> STD::SET作为构造函数参数。

std::string s_line = line = "Please, split|this    string";

std::set<std::string> delims;
delims.insert("\t");
delims.insert(",");
delims.insert("|");

std::vector<std::string> line_parts;
boost::split ( line_parts, s_line, boost::is_any_of(delims));
#include <string>
#include <set>
#include <vector>
#include <iterator>
#include <iostream>
#include <boost/algorithm/string.hpp>

int main()
{
    std::string s_line = "Please, split|this\tstring";
    std::string delims = "\t,|";

    std::vector<std::string> line_parts;
    boost::split(line_parts, s_line, boost::is_any_of(delims));

    std::copy(
        line_parts.begin(),
        line_parts.end(),
        std::ostream_iterator<std::string>(std::cout, "/")
    );

    // output: `Please/ split/this/string/`
}
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
std::string s_line=“请,拆分|此\t字符串”;
std::string delims=“\t,|”;
std::矢量线零件;
boost::split(line_parts,s_line,boost::是(delims)中的任意一个);
复制(
行_parts.begin(),
行_parts.end(),
std::ostream_迭代器(std::cout,“/”)
);
//输出:`Please/split/this/string/`
}

主要问题是
boost::is_any_
std::string
char*
作为参数。不是
std::set


您应该将
delims
定义为
std::string delims=“\t,|”
,然后它就可以工作了。

遗憾的是
的任何一个都不带迭代器范围。