将字符串拆分为向量时如何实现多个分隔符?

How can I implement multiple delimiters when splitting a string into a vector?

我的教授需要我们在拆分字符串时忽略任何标点符号,以便 "Hello, my name is Jack!" 拆分时不带逗号和感叹号。具体来说,我们必须丢弃逗号、句号、问号、感叹号、分号和冒号。

下面的代码有效,但唯一的分隔符是 space。如何使用已有的内容添加更多分隔符?

函数调用:

tokenize(code, ' ', tokens);

分割字符串并存入向量的函数:

void tokenize(const string& str, char delim, vector<string>& tokens)
{
    int tokenStart = 0;

    int delimPos = str.find(delim);

    while(delimPos != string::npos)
    {
        string tok = str.substr(tokenStart, delimPos - tokenStart);

        tokens.push_back(tok);

        delimPos++;

        tokenStart = delimPos;

        delimPos = str.find(delim, delimPos);

        if(delimPos == string::npos)
        {
            string tok = str.substr(tokenStart, delimPos - tokenStart);

            tokens.push_back(tok);
        }   
    }
}

string::find_first_of 匹配参数中的任何字符,因此您可以像现在一样使用它而不是 string::find。然后你所要做的就是不断更新 pos,比如:

void tokenize(const string& str, const string& delim, vector<string>& tokens)
{
    int tokenStart = 0;

    int delimPos = str.find_first_of(delim);

    while(delimPos != string::npos)
    {
        string tok = str.substr(tokenStart, delimPos - tokenStart);
        ...
        delimPos = str.find_first_of(delim, delimPos);
        ...
    }