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

时间:2019-01-14 13:45:05

标签: c++

我正在做一个子手游戏,我必须检查看看单词中的所有字母都排列正确,然后只返回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;
    }
}

4 个答案:

答案 0 :(得分:0)

您可以使用bool运算符:

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;

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

答案 1 :(得分:0)

您正在将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;
}

答案 2 :(得分:0)

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

您要执行的步骤是:

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

您是否偶然发现了逻辑缺陷?提示:步骤 2 4 似乎有点偏离。

解决此问题的一种简单方法,但实际上可行的是:

  1. 从名为 a 的袋子 A 中获得一封信。如果没有,请转到步骤4。
  2. 仔细检查包 B 中的所有字母,以查找与当前 a 匹配的内容。
  3. 如果找到匹配项,请转到步骤1。如果找不到,则两个行李都不匹配。退出。
  4. 袋子 A 和袋子 B 仅包含相同的字母,并且仅当 A B < / em>相同。

答案 3 :(得分:0)

您可以尝试将<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;
    });
}