我正在做一个子手游戏,我必须检查看看单词中的所有字母都排列正确,然后只返回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;
}
}
答案 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 相同的字母。
您要执行的步骤是:
您是否偶然发现了逻辑缺陷?提示:步骤 2 和 4 似乎有点偏离。
解决此问题的一种简单方法,但实际上可行的是:
答案 3 :(得分:0)
您可以尝试将<algorithm>
库与std::all_of
和std::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;
});
}