我想将字符串Tokenizer用于CPP字符串,但我能找到的只是Char *。 CPP字符串有什么类似的东西吗?
答案 0 :(得分:7)
“令牌”是什么意思?如果它是由任何空格分隔的,那么字符串流就是你想要的:
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()
的组合应该这样做。
答案 1 :(得分:4)
你可以像chubsdad那样说或使用boost tokenizer:http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm
如果你对Boost感到害怕,那么自己动手并不是那么复杂。
答案 2 :(得分:1)
你应该看看Boost Tokenizer
答案 3 :(得分:0)
查看STL algos,例如 find_first_of , find_first_not_of 等等,以创建自定义的。
答案 4 :(得分:0)
试试我在某处找到的片段(甚至可能在这里?):
#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);
}