检查单词中的字母是否在另一个数组中,如果全部匹配,则返回true
Check to see if the letters in a word in another array and return true if all match
我正在制作一个刽子手游戏,我必须检查单词中的所有字母是否都在正确的数组中,然后只返回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;
}
好的,我有两个装满字母的袋子,袋子A和B。我想知道袋子A是否包含与袋子B相同的字母。
您正在执行的步骤是:
- 从包中获取一封名为a的信。如果没有剩余,则转到步骤4
- 检查字母a是否等于袋子B
- 如果不是说两个袋子不匹配
- 说两个袋子不匹配
你是否偶然发现了你逻辑中的缺陷?提示:步骤2和4似乎有点偏离。
解决这个问题的一个天真的方法是:
- 从包中获取一封名为a的信。如果没有剩余,则转到步骤4
- 浏览包B中的所有字母,试图找到与当前a匹配的字母
- 如果找到匹配项,请转至步骤1。如果不是,两个袋子不匹配。退出
- 只有当A和B中的字母数相同时,BagA才会包含相同的字母
您可以尝试将<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;
});
}
相关文章:
- 如果没有malloc,链表实现将失败
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- C++擦除(如果存在)
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 在'如果'陈述输出如何正确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 如果基类包含双指针成员,则派生类的构造函数
- 如果没有数学库,我如何在C++中创建复利公式
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- C 数学问题,如果数学全部在同一行上,则双重返回值
- 检查单词中的字母是否在另一个数组中,如果全部匹配,则返回true
- 积极使用的C++环境缺乏对标准库的支持(如果不是全部的话,也是大多数)