Ответ 1
Вы должны попробовать следующее:
boost::split(line_parts, s_line, boost::is_any_of("\t,|"));
Я не уверен, как использовать boost::is_any_of
для разделения строки с помощью набора символов, любой из которых должен разделить строку.
Я хотел сделать что-то вроде этого, поскольку понял, что функция is_any_of принимает параметр 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));
Однако это создает список ошибок boost/STD.
Должен ли я сохраняться с is_any_of
или есть лучший способ сделать это, например. используя разделение регулярных выражений?
Вы должны попробовать следующее:
boost::split(line_parts, s_line, boost::is_any_of("\t,|"));
Ваша первая строка недопустима синтаксисом С++ без ранее существовавшей переменной с именем line
, а boost::is_any_of
не принимает std::set
в качестве параметра конструктора.
#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/`
}
Многие проблемы, которые boost::is_any_of
принимают в качестве параметра std::string
или char*
. Не std::set<std::string>
.
Вы должны определить delims
как std::string delims = "\t,|"
, а затем он будет работать.