Разделение строки c++ std:: с помощью токенов, например "; " [дубликат]
лучший способ разделить строку в C++? Можно предположить, что строка состоит из слов, разделенных разделителем ;
.
С нашей точки зрения направляющих линий строковые функции C не допускаются, а также Boost также не разрешается использовать из-за проблем безопасности open source не допускается.
лучшее решение у меня есть это:
string str("denmark;sweden;india;us");
выше str
должны храниться в векторе в виде строк. как мы можем достичь это?
Спасибо за входы.
3 ответа:
найти
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"; }