检查单词中的字母是否在另一个数组中,如果全部匹配,则返回true

Check to see if the letters in a word in another array and return true if all match

本文关键字:全部 如果 true 返回 数组 单词中 是否 另一个 检查      更新时间:2023-10-16

我正在制作一个刽子手游戏,我必须检查单词中的所有字母是否都在正确的数组中,然后只返回true。我被困在这一点上,因为一旦所有的字母都在中,我不知道如何返回true

我尝试过不同的虚假和真实场景,但它们似乎都不起作用。下面的for循环是我尝试过的。

// This function returns true if the secret word has been guessed correctly.
// Otherwise, it will return false.
bool iswordcomplete(char secretword[], char rights[]) {
// Task 3. Finish this function
//
// Use a for loop to look at each position of the secret word
//
// If all letters in the secret word is in the rights array,
// return true; otherwise, return false.
//
for (i = 0; i < strlen(secretword); i++) {
if secretword[i] != rights
return false;
return false;
}
}

您可以使用布尔运算符:

bool returned = true; //True by default
for (i = 0; i < strlen(secretword); i++) 
{
if (secretword[i] != rights) // | If test returns false, returned is set to false
returned &= false;       // | If test returns true, returned stays false if previously set to false
}
return returned;

当测试为假时,它应该将值设置为假,但不会将其恢复为真

您正在将secretword数组单元格的内容与rights数组指针secretword[i] != rights进行比较。

这不是你想要的。您要比较单元格数据:secretword[i] != rights[i]

为了知道secretword的一个字母是否在rights中,您必须在rights上循环secretword:的所有字母

bool iswordcomplete(char secretword[], char rights[]) {
for (int i = 0; i < strlen(secretword); i++) {
bool isInRights = false;
// we loop over all characters of rights. We stop at first match
for (int j = 0; j < strlen(rights) && !isInRights; j++)
{ 
isInRights = (secretword[i] == rights[j]);
}
if (!isInRights)
{
// We haven't found anything in right, let's stop
return false;
}
}
// If we reach this line, all the characters from secretword are in rights
return true;
}

好的,我有两个装满字母的袋子,袋子AB。我想知道袋子A是否包含与袋子B相同的字母。

您正在执行的步骤是:

  1. 从包中获取一封名为a的信。如果没有剩余,则转到步骤4
  2. 检查字母a是否等于袋子B
  3. 如果不是说两个袋子不匹配
  4. 说两个袋子不匹配

你是否偶然发现了你逻辑中的缺陷?提示:步骤24似乎有点偏离。

解决这个问题的一个天真的方法是:

  1. 从包中获取一封名为a的信。如果没有剩余,则转到步骤4
  2. 浏览包B中的所有字母,试图找到与当前a匹配的字母
  3. 如果找到匹配项,请转至步骤1。如果不是,两个袋子不匹配。退出
  4. 只有当AB中的字母数相同时,BagA才会包含相同的字母

您可以尝试将<algorithm>库与std::all_ofstd::find一起使用。可能的解决方案是:

bool iswordcomplete(char secretword[], char rights[]) {
char* s_end = secretword + std::strlen(secretword);
char* r_end = rights + std::strlen(rights);
return std::all_of(secretword, s_end, [&rights,&r_end](char ch) {
return std::find(rights, r_end, ch) != r_end;
});
}
相关文章: