我的教授需要我们分开一个字符串,忽略任何标点符号,以便#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);
}
}
}
答案 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);
...
}