我正在尝试使用以下方法(使用搜索算法)调整char数组的大小:
char* items[] = { "apple", "apple_2", "banana", "orange" };
并以此为例,当我搜索“ app”,“ appl”,“ pple”时,我希望像这样调整char数组的大小:
char* items[] = { "apple", "apple_2" };
仅使用包含“ app”的单词,例如,“ appl”,如果我搜索“ a”,则char数组不会移动,因为示例中的所有单词都包含“ a”;
我不确定我是否真的很清楚。提前感谢您的帮助!对不起,我的英语!
答案 0 :(得分:0)
C ++中的静态数组无法在运行时调整大小。
为了实现您的目标,请查看std::vector
标准容器。它可以动态更改大小。
以下是示例,说明如何执行任务:
#include <iostream>
#include <vector>
std::vector<std::string> filter(const std::vector<std::string>& strings, const std::string& pattern)
{
std::vector<std::string> matchItems;
for (const auto& elem : strings)
{
if (elem.find(pattern) != std::string::npos)
{
matchItems.push_back(elem);
}
}
return matchItems;
}
int main()
{
std::vector<std::string> v { "apple", "apple_2", "banana", "orange" };
auto filtered = filter(v, "app");
for (const auto& elem : filtered)
{
std::cout << elem << " ";
}
return 0;
}
此外,使用原始char*
和数组是很老的样式。
在现代C ++中,您应该使用std::string, std::vector, std::array
希望有帮助!
答案 1 :(得分:0)
除非有很好的理由使用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
和lambda,我们可以将所需的值收集到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;
}