C++ C+中的strtok()模拟+;

C++ C+中的strtok()模拟+;,c++,c,delimiter,C++,C,Delimiter,我就是找不到一种算法,可以用许多分隔符将字符串分割成单词。我知道如何用istringstream按空格拆分字符串,用getline按单个分隔符拆分字符串。我怎样才能把它们全部连接起来 例如: 输入:This-is-a!,弦 输出: This is a string 我建议在Boost中使用String(String算法),参见.P/>< P>为什么不只是代码>包含< /代码>,在C++程序中使用 STD::Strtok()/? #include <iostream> #

我就是找不到一种算法,可以用许多分隔符将字符串分割成单词。我知道如何用
istringstream
按空格拆分字符串,用
getline
单个分隔符拆分字符串。我怎样才能把它们全部连接起来

例如:

输入
This-is-a!,弦
输出

This  
is  
a  
string

我建议在Boost中使用String(String算法),参见.P/>< P>为什么不只是代码>包含< /代码>,在C++程序中使用<代码> STD::Strtok()/<代码>?

#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;
}
#包括 #包括 使用名称空间std; void SplitToVector(vector&v、字符串dlm、字符串src){ 字符串::size_type p,start=0,len=src.length(); v、 清除(); 开始=src.find_first_not_of(dlm); p=src.find_first_of(dlm,start); while(p!=string::npos){ v、 推回(src.substr(启动,p-start)); start=src.find_first_not_of(dlm,p); p=src.find_first_of(dlm,start); } if(len>start)//rest v、 推回(src.substr(启动,len-start)); } 内部主(空){ 字符输入[256]=“This-is-a!,string;”; 向量v; int i,大小; 拆分向量(v,“-!,;”,输入);
//cUT你可能会在这里找到一个:你可以使用ReXEX与STD库:还有。你看,我用它来做考试,所以不推荐使用外部库。我只想使用C++库。非常感谢。这很有用!