Удаление строк из строкового вектора из подстроки

Я реализую алгоритм распространения предложения блока в C ++. Я прочитал в файле CNF вектор с каждым предложением в отдельном элементе вектора, например,

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

Пока я могу выделить отдельные элементы и установить их в виде строки, поэтому в этом примере я установил бы строку равной «1».

Следующим шагом будет удаление всех элементов в векторе, которые содержат 1, поэтому в этом примере будут удалены 1-й, 2-й и 3-й элементы. Однако, когда я запускаю команду удаления вектора

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

Он удалит только те элементы, которые в точности равны «1», а не элементы, содержащие 1, а также другие символы. Есть ли способ удалить какой-либо элемент вектора, который содержит строку?

(Надеюсь, это имеет смысл, спасибо за ваше время)

1

Решение

использование std::remove_if и искать 1 в строке (живой пример):

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

Если у вас нет C ++ 11 для лямбда-выражения, то нормальная функция или функтор, или Boost-лямбда, или что-то еще, что плавает в вашей лодке, также будут работать.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]