2013-05-29 16 views
3

Я просто не могу найти алгоритм разделения строки на слова многочисленными разделителями. Я знаю, как разделить строку пробелами с istringtream и на одиночный разделитель с getline. Как я могу подключить их все.strtok() аналог в C++

Например:

вход: This -is-a!,string;
выход:

This 
is 
a 
string 
+1

Вы, вероятно, найти один в здесь: http://stackoverflow.com/questions/236129/splitting-a-string-in-c – chris

+1

Вы можете использовать регулярное выражение с библиотекой станд: HTTP: // www.cplusplus.com/reference/regex/ –

+0

Существует также [Boost.tokenizer] (http://www.boost.org/doc/libs/1_53_0/libs/tokenizer/index.html). – Angew

ответ

1
#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

void SplitToVector(vector<string> &v, string dlm, string src){ 
    string::size_type p, start=0, len=src.length(); 

    v.clear(); 
    start = src.find_first_not_of(dlm); 
    p = src.find_first_of(dlm, start); 
    while(p != string::npos){ 
     v.push_back(src.substr(start, p-start)); 
     start = src.find_first_not_of(dlm, p); 
     p = src.find_first_of(dlm, start); 
    } 
    if(len>start)//rest 
     v.push_back(src.substr(start, len - start)); 
} 

int main(void){ 
    char input[256] = "This -is-a!,string;"; 
    vector<string> v; 
    int i, size; 

    SplitToVector(v, "-!,;", input); 
    //cout << input << endl; 
    size = v.size(); 
    for(i=0; i<size; i++) 
     cout << v.at(i) << endl; 
    return 0; 
} 
+0

Большое спасибо. Это было полезно! – ka2m

2

Почему бы не просто #include <cstring> и использовать std::strtok() в вашей программе на C++?

+0

Я бы хотел использовать только библиотеки C++. – ka2m