使用标记拆分C ++ std :: string,例如“;”

在C ++中分割string的最佳方法? string可以被认为是由分隔符分隔的单词组成;

从我们的引导线的angular度来看,Cstring函数是不允许的,而且由于安全考虑,也不允许使用开放源码的Boost。

我现在最好的解决scheme是:

 string str("denmark;sweden;india;us"); 

上面的str应该作为string存储在向量中。 我们怎样才能做到这一点?

感谢input。

我发现std :: getline()往往是最简单的。 可选的分隔符参数意味着它不仅仅是读“行”:

 #include <sstream> #include <iostream> #include <vector> using namespace std; int main() { vector<string> strings; istringstream f("denmark;sweden;india;us"); string s; while (getline(f, s, ';')) { cout << s << endl; strings.push_back(s); } } 

您可以使用stringstream,并将元素读入向量中。

这里有很多不同的例子

其中一个例子的副本:

 std::vector<std::string> split(const std::string& s, char seperator) { std::vector<std::string> output; std::string::size_type prev_pos = 0, pos = 0; while((pos = s.find(seperator, pos)) != std::string::npos) { std::string substring( s.substr(prev_pos, pos-prev_pos) ); output.push_back(substring); prev_pos = ++pos; } output.push_back(s.substr(prev_pos, pos-prev_pos)); // Last word return output; } 

有几个库可以解决这个问题,但最简单的可能是使用Boost Tokenizer:

 #include <iostream> #include <string> #include <boost/tokenizer.hpp> #include <boost/foreach.hpp> typedef boost::tokenizer<boost::char_separator<char> > tokenizer; std::string str("denmark;sweden;india;us"); boost::char_separator<char> sep(";"); tokenizer tokens(str, sep); BOOST_FOREACH(std::string const& token, tokens) { std::cout << "<" << *tok_iter << "> " << "\n"; }