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

时间:2018-03-07 23:05:09

标签: string c++11 vector split delimiter

我的教授需要我们分开一个字符串,忽略任何标点符号,以便#34;你好,我的名字是杰克!"将没有逗号和感叹号分开。具体来说,我们必须丢弃逗号,句号,问号,感叹号,分号和冒号。

下面的代码有效,但唯一的分隔符是空格。如何使用我所拥有的内容添加更多分隔符?

函数调用:

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

1 个答案:

答案 0 :(得分:0)

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);
        ...
    }