Строковый токенизатор для CPP String? - PullRequest
7 голосов
/ 26 августа 2010

Я хочу использовать строку Tokenizer для строки CPP, но все, что я мог найти, было для Char *.Есть ли что-нибудь похожее для строки CPP?

Ответы [ 5 ]

7 голосов
/ 26 августа 2010

Что вы подразумеваете под "токеном"?Если это что-то, разделенное любым пробелом , то вам нужны строковые потоки:

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().

4 голосов
/ 26 августа 2010

Вы можете сделать, как сказано в chubsdad или использовать буст-токенизатор: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm

Делать это самостоятельно не так сложно, если вы боитесь Boost.

1 голос
/ 26 августа 2010

Вам стоит взглянуть на Boost Tokenizer

0 голосов
/ 26 августа 2010

Попробуйте этот фрагмент, который я где-то нашел (может быть, даже здесь?):

#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);
}
0 голосов
/ 26 августа 2010

Проверьте STL-алгоритмы, такие как find_first_of , find_first_not_of и т. Д., Чтобы создать собственный.

...