布尔运算符问题
Boolean operator problems
这里是简单的代码,我正在尝试编写可以提取特定关键字的代码,但我的运气不太好。这是代码:
#include <iostream>
int main(){
std::string input;
bool isUnique = true;
std::cout<<"Please type a word: ";
std::cin>>input;
if(input == "the" || "me" || "it"){
isUnique = false;
}
if(isUnique){
std::cout<<"UNIQUE!!"<<std::endl;
}
else
std::cout<<"COMMON"<<std::endl;
}
如果您输入这三个词中的任何一个(在 if 语句中),您将从程序中获得正确的输出 ("COMMON")。但是,如果您键入任何其他内容,您将获得完全相同的输出。如果我将程序限制为只搜索一个词(即:"the")然后对其进行测试,一切正常,但只要有两个或更多关键字,程序就会将所有内容列为 "COMMON"。我也尝试用逗号替换 or 语句,但那也没有做任何事情。我试图将其实现的代码将包含 50 多个关键字,因此我试图找到最有效的方法来搜索这些词。
你只需要改变:
if(input == "the" || "me" || "it")
至:
if(input == "the" || input == "me" || input == "it")
运算符 ||
在 A || B
中的工作方式是每个子句 A
和 B
都是独立计算的(如果有的话)。 B
不关心 A
.
的上下文
因此,在您的情况下,可能会计算以下 3 个表达式(最后一个从不计算):
input == "the"
"me"
"it"
第一个可能会或可能不会导致 true
,但第二个肯定会。
您还可以将代码重写为:
int main() {
std::cout << "Please type a word: ";
std::string input;
std::cin >> input;
auto common_hints = {"the", "me", "it"};
if (std::find(begin(common_hints), end(common_hints), input) != end(common_hints)) {
std::cout << "COMMON\n";
} else {
std::cout << "UNIQUE!!\n";
}
}
或(使用提升):
int main() {
std::cout << "Please type a word: ";
std::string input;
std::cin >> input;
auto common_hints = {"the", "me", "it"};
if (boost::algorithm::any_of_equal(common_hints, input)) {
std::cout << "COMMON\n";
} else {
std::cout << "UNIQUE!!\n";
}
}
这里是简单的代码,我正在尝试编写可以提取特定关键字的代码,但我的运气不太好。这是代码:
#include <iostream>
int main(){
std::string input;
bool isUnique = true;
std::cout<<"Please type a word: ";
std::cin>>input;
if(input == "the" || "me" || "it"){
isUnique = false;
}
if(isUnique){
std::cout<<"UNIQUE!!"<<std::endl;
}
else
std::cout<<"COMMON"<<std::endl;
}
如果您输入这三个词中的任何一个(在 if 语句中),您将从程序中获得正确的输出 ("COMMON")。但是,如果您键入任何其他内容,您将获得完全相同的输出。如果我将程序限制为只搜索一个词(即:"the")然后对其进行测试,一切正常,但只要有两个或更多关键字,程序就会将所有内容列为 "COMMON"。我也尝试用逗号替换 or 语句,但那也没有做任何事情。我试图将其实现的代码将包含 50 多个关键字,因此我试图找到最有效的方法来搜索这些词。
你只需要改变:
if(input == "the" || "me" || "it")
至:
if(input == "the" || input == "me" || input == "it")
运算符 ||
在 A || B
中的工作方式是每个子句 A
和 B
都是独立计算的(如果有的话)。 B
不关心 A
.
因此,在您的情况下,可能会计算以下 3 个表达式(最后一个从不计算):
input == "the"
"me"
"it"
第一个可能会或可能不会导致 true
,但第二个肯定会。
您还可以将代码重写为:
int main() {
std::cout << "Please type a word: ";
std::string input;
std::cin >> input;
auto common_hints = {"the", "me", "it"};
if (std::find(begin(common_hints), end(common_hints), input) != end(common_hints)) {
std::cout << "COMMON\n";
} else {
std::cout << "UNIQUE!!\n";
}
}
或(使用提升):
int main() {
std::cout << "Please type a word: ";
std::string input;
std::cin >> input;
auto common_hints = {"the", "me", "it"};
if (boost::algorithm::any_of_equal(common_hints, input)) {
std::cout << "COMMON\n";
} else {
std::cout << "UNIQUE!!\n";
}
}