CPP String的字符串标记器?

时间:2010-08-26 09:32:36

标签: c++ string tokenize

我想将字符串Tokenizer用于CPP字符串,但我能找到的只是Char *。 CPP字符串有什么类似的东西吗?

5 个答案:

答案 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);
}