从子字符串中删除字符串向量中的字符串

时间:2014-03-14 23:18:16

标签: c++ string vector ucp

我正在将单元子句传播算法实现到c ++中。我已经在CNF文件中读取了一个向量,其中每个子句都在向量的单个元素中,例如

1 2 0
1 2 3 0
1 0
3 4 0

到目前为止,我能够隔离单个元素并将它们设置为字符串,因此在本例中我将字符串设置为" 1"。

下一步是删除向量中包含1的所有元素,因此在此示例中将删除第1个,第2个和第3个元素。但是当我运行vector remove命令时

clauses.erase(std::remove(clauses.begin(), clauses.end(), "1"), clauses.end());

它只会删除完全" 1"的元素,而不是包含1和其他字符的元素。反正有没有删除包含字符串的向量的任何元素?

(我希望这是有道理的,谢谢你的时间)

1 个答案:

答案 0 :(得分:4)

使用std::remove_if并在字符串(live example)中搜索1:

clauses.erase(
    std::remove_if(clauses.begin(), clauses.end(), 
        [](const std::string &s) {return s.find('1') != std::string::npos;} 
    ), 
    clauses.end()
);

如果你没有为lambda提供C ++ 11,那么普通的函数或函子,或者Boost lambda,或者你的船漂浮的任何东西都可以。