Splitting a C++ std::string using tokens, e.g. “;”
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to split a string in C++?
在C++中分割字符串的最佳方法?可以假定字符串由以下单词组成:
从我们的参考线来看,不允许使用C字符串函数,也不允许使用Boost,因为不允许使用开放源码。
我现在拥有的最佳解决方案是:
string str("丹麦;瑞典;印度;美国");
上面的str应该作为字符串存储在向量中。我们如何才能做到这一点?
感谢您的输入。
我发现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #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); } } |
您可以使用字符串流并将元素读取到向量中。
这里有许多不同的例子…
示例之一的副本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #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 <<">" <<" "; } |