将字符串拆分为向量时如何实现多个分隔符?
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);
...
}
我的教授需要我们在拆分字符串时忽略任何标点符号,以便 "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);
...
}