C ++具有多个char的多个分隔符

时间:2015-05-14 05:56:13

标签: c++ stdstring

在c ++中,我在使用单个字符分隔符和字符串分隔符编码多个分隔符时遇到问题(例如“< =”作为分隔符而不是“=”)。下面的代码适用于单个字符分隔符(我将分隔符设置为空格,逗号,点,加号和相等)并且很好地分隔字符串行中的单词。但是,我不知道如何在此代码中添加字符串分隔符。

std::string delimiters = " ,.+=";//I want "<=" added as a single delimiter
std::string line = "this+is,a.string=testing one";
std::size_t prev = 0, pos;
while ((pos = line.find_first_of(delimiters, prev)) != std::string::npos)
{
    if (pos > prev)
    {
        cout << line.substr(prev, pos-prev) << endl;
        prev = pos + 1;
    }
}
if (prev < line.length()){
    cout << line.substr(prev, std::string::npos) << endl;
}

3 个答案:

答案 0 :(得分:0)

我会更改行

rev = pos + 1

以下列方式:

if (pos > prev)
{
    cout << line.substr(prev, pos-prev) << endl;
    prev = line.find_first_not_of(delimiters, pos))
}

所以一旦你点击分隔符,你就会转移到不是分隔符的furst char。

答案 1 :(得分:0)

逐个进行两个字符的搜索。 搜索&#34;&lt;&#34;首先,如果发现立即搜索&#34; =&#34;如果找到,请继续搜索。

答案 2 :(得分:0)

这是通过擦除从line_copy字符串中找到的分隔符,使用特殊分隔符的特殊if语句来实现此目的的一种方法。完整example here

auto pos = find_first_of(begin(line_copy), end(line_copy), begin(delimiters), 
                         end(delimiters));

while (pos != line_copy.end()) {
    if (pos != line_copy.end()) {
        if (*pos == '<' && *(pos + 1) == '=') {
            cout << "delimiter: \'";
            cout << string(pos, pos + 2) << "\'" << endl;

            // remove the delimiters from copy string
            line_copy.erase(pos, pos + 2);
        }
        else {
            cout << "delimiter: \'" << *pos << "\'" << endl;

            // remove the delimiters from copy string
            line_copy.erase(pos, pos + 1);
        }
    }
    cout << endl;

    pos = find_first_of(begin(line_copy), end(line_copy), begin(delimiters), 
                        end(delimiters));
}