Если нет очень веской причины для использования массива char *
(если есть, укажите эту причину, и я постараюсь указать ее в своем ответе), вы должны попытаться использовать возможности языка.
#include <vector>
#include <string>
#include <algorithm>
int main (int argc, char **argv) {
std::vector<std::string> items{ "apple", "apple_2", "banana", "orange" };
std::string test_value{"app"};
auto new_end = std::remove_if(items.begin(), items.end(),
[&test_value](auto idx)->auto {
return idx.find(test_value) == std::string::npos;
});
items.erase(new_end, items.end());
return 0;
}
Сначала мы используем std::vector<std::string>
для хранения значений.Как уже было отмечено, изменение размера массива проблематично.Затем, используя определенную test_value
библиотечную функцию STL std::remove_if
и лямбду, мы можем собрать желаемое значение в начале vector
.Затем items.erase()
усекает вектор.
Чтобы оставить оригинал items
без изменений:
#include <vector>
#include <string>
#include <algorithm>
int main (int argc, char **argv) {
std::vector<std::string> items{ "apple", "apple_2", "banana", "green apple", "orange" };
std::string test_value{"app"};
std::vector<std::string> selected_items;
std::copy_if(items.begin(), items.end(), std::back_inserter(selected_items),
[&test_value](auto idx)->auto {
return idx.find(test_value) != std::string::npos;
});
return 0;
}