gpt4 book ai didi

c++ - 如何将std::find()与2d std:数组一起使用?

转载 作者:行者123 更新时间:2023-12-02 10:02:30 26 4
gpt4 key购买 nike

我正在写一个函数CreateGrid(),它试图将std::string和2d std::array作为参数,并将std::string中的各个字符放入数组中。如果剩余空间,则数组的其余部分应按字母顺序用字母A-Y(包括端值)填充,前提是它们未出现在std::string中。每个字符在最终返回的数组中只能出现一次。

所以对于输入string keyword = "HELO";
输出为:

H E LO A BC D F

Note the char 'E' only appears once.

I am trying to use std::find() to test whether all the chars in the alphabet A-Y (Z intentionally excluded) is already in the array, due to the keyword, before inserting it if it is not so that there are no duplicates. I am getting a compile error.

Code:

array<array<char,3>,3> CreateGrid(std::string keyword, array<array<char,3>,3> myArray)
{
char letterToFind = 'A';

for (int row = (keywordLength/3); row < 3; row++ )
{
for (int column = (keywordLength % 3); column < 3; column++)
{
auto it = std::find(begin(myArray), end(myArray), letterToFind);
if ( it == end(myArray) ) // value not in array
{
myArray[row][column] = letterToFind; //insert
}
letterToFind++;
}
}

return myArray;
}

int main()
{
array<array<char,3>,3> myArray = { {'H','E','L'}, {'O','+','+'}, {'+','+','+'} };
CreateGrid("HELO", myArray);

return 0;
}

我收到此行的编译错误:
auto it = std::find(begin(myArray), end(myArray), letterToFind);

消息:请参见对正在使用[_InIt = std::_ Array_iterator ,char>(_ InIt,const _InIt,const char&)'的引用:: array 3>,_ Ty = std::array ]

如何检查数组中是否已存在 char,如果没有,则添加它?

最佳答案

由于您具有嵌套数组,因此这通常并不简单。 std::find只能将迭代器返回到外部数组,如果您需要更改内部数组中的值,则这没有用。

但是,我注意到,除了查看所查找的元素是否位于之外,您实际上没有使用it。因此,我们可以重新定义操作:与其在包含该值的内部数组中查找元素,还不如查找包含您要查找的值的内部数组就足够了:

auto it = std::find(
begin(myArray), end(myArray),
[letterToFind](array<char,3> const & inner) {
return std::find(begin(inner), end(inner), letterToFind) != end(inner);
}
);

如果找到了这样的内部数组,则说明该值存在于2d数组中并且可以继续。

由于不需要迭代器,因此也可以使用 std::any_of代替:
bool found = std::any_of(
begin(myArray), end(myArray),
[letterToFind](array<char,3> const & inner) {
return std::find(begin(inner), end(inner), letterToFind) != end(inner);
}
);

关于c++ - 如何将std::find()与2d std:数组一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com