Я хочу использовать Tokenizer строки для строки CPP, но все, что я мог найти, было для Char *. Есть ли что-нибудь похожее для строки CPP?
Что вы подразумеваете под "токеном"? Если это что-то, разделенное любым пробелом, строковые потоки — это то, что вам нужно:
std::istringstream iss("blah wrxgl bxrcy")
for(;;) {
std::string token;
if(!(iss>>token)) break;
process(token);
}
if(!iss.eof()) report_error();
В качестве альтернативы, если вы ищете определенный символ-разделитель, вы можете заменить iss>>token
с std::getline(iss,token,sep_char)
.
Если в качестве разделителя может выступать более одного символа (и если это не пробелы), комбинации std::string::find_first()
и std::string: :substr()
должно подойти.
Вы можете сделать, как сказал chubsdad, или использовать токенизатор повышения: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm
Выполнение этого самостоятельно не является так сложно, если вы боитесь Boost.
Проверьте алгоритмы STL, такие как find_first_of , find_first_not_of и так далее, чтобы создать собственный.
Попробуйте этот фрагмент, который я нашел где-то (может быть, даже здесь?):
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}