使用标记分割C ++ std :: string,例如“;”
在C ++中分割字符串的最佳方法是什么? 该字符串可以被假定为由分隔符分隔的单词组成;
。
从我们的引导线的角度来看,C字符串函数是不允许的,并且由于安全考虑,不允许使用开源。
我现在最好的解决方案是:
string str("denmark;sweden;india;us");
上面的str
应该作为字符串存储在向量中。 我们怎样才能做到这一点?
感谢您的投入。
我发现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);
}
}
您可以使用字符串流并将元素读入向量中。
这里有很多不同的例子...
其中一个例子的副本:
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";
}
链接地址: http://www.djcxy.com/p/19561.html
上一篇: Splitting a C++ std::string using tokens, e.g. ";"
下一篇: Parse (split) a string in C++ using string delimiter (standard C++)