C++ c++;增压分离管柱

C++ c++;增压分离管柱,c++,boost,split,C++,Boost,Split,我使用boost::split方法拆分字符串,如下所示: 我首先确保包含正确的标题,以便访问boost::split: #include <boost/algorithm/string.hpp> 这是我使用结果字符串向量的方式: void printstrs(vector<string> strs) { for(vector<string>::iterator it = strs.begin();it!=strs.end();++it) {

我使用
boost::split
方法拆分字符串,如下所示:

我首先确保包含正确的标题,以便访问
boost::split

#include <boost/algorithm/string.hpp>
这是我使用结果字符串向量的方式:

void printstrs(vector<string> strs)
{
    for(vector<string>::iterator it = strs.begin();it!=strs.end();++it)
    {
        cout << *it << "-------";
    }

    cout << endl;
}


cout问题出在代码的其他地方,因为这是可行的:

string line("test\ttest2\ttest3");
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));

cout << "* size of the vector: " << strs.size() << endl;    
for (size_t i = 0; i < strs.size(); i++)
    cout << strs[i] << endl;

我对您为什么在覆盖第一个结果时遇到问题的最好猜测是您实际上从文件中读取了输入行。该行的结尾可能有一个\r,因此您的结尾是这样的:

------------test2------test3

发生的情况是机器实际打印了以下内容:

test------test2------test3\r------

这意味着,由于test3末尾的回车符,test3后面的破折号打印在第一个单词的顶部(以及test和test2之间的一些现有破折号,但您不会注意到,因为它们已经是破折号)。

template
void split1(const std::string和str、Container和cont)
{
boost::algorithm::split_regex(cont,str,boost::regex(“\t”);
}
std::vec1;
std::string str=“hest1\twest2\tpiest3”;
split1(str,vec1);

vec==(“hest1”、“west2”、“piest3”)

显示如何使用该向量。我想问题就在这里。
boost::is_any_(“\t”)
的效率低于
[](charc){return c='\t';}
。你只想检查一个可能性。(不知道为什么没有
boost:is('\t')
)@MSalters注释中的代码是什么意思?如何使用该代码替换
boost::is_any_of()
?@PoscoGrubb:它被称为“lambda”,并且
boost::splits
理解它们。如果您不分享一个再现您所面临问题的最小示例,我们将无法为您做任何其他事情。记住:最简单的例子,不是你的完整应用。谢谢。似乎我改变了coutFYI,在这个示例中使用了以下Boost头:
#include
#include
void printstrs(vector<string> strs)
{
    for(vector<string>::iterator it = strs.begin();it!=strs.end();++it)
    {
        cout << *it << "-------";
    }

    cout << endl;
}
cout << *it << "-------";
cout << *it << endl;
string line("test\ttest2\ttest3");
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));

cout << "* size of the vector: " << strs.size() << endl;    
for (size_t i = 0; i < strs.size(); i++)
    cout << strs[i] << endl;
string line("test\ttest2\ttest3");
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));

cout << "* size of the vector: " << strs.size() << endl;
for (vector<string>::iterator it = strs.begin(); it != strs.end(); ++it)
{
    cout << *it << endl;
}
* size of the vector: 3
test
test2
test3
template <class Container>
void split1(const std::string& str, Container& cont)
{
   boost::algorithm::split_regex(cont, str, boost::regex("\t"));
}

std::vector<std::string> vec1;
std::string str = "hest1\twest2\tpiest3";
split1(str, vec1);