我如何将 OR 与 if 语句一起使用字符串

How do I use OR with if statements in regards to strings

本文关键字:一起 语句 字符串 if OR      更新时间:2023-10-16

我想做一个if语句来比较两个字符串,看看它们是否匹配。 所以:

if (TypedAnswerOne == CorrectAnswerOne)

如果正确答案的键入与 CorrectAnswerOne 字符串值中的正确答案完全相同,则代码有效。 完全没有问题。

然而。。。例如,如果输入的答案略有不同,例如一个单词而不是两个单词,则表明答案是错误的。

所以我想知道我如何用字符串做一个"OR"?

所以:

if (TypedAnswerOne == CorrectAnswerOne or "dirtballs" or "Dirt Balls" or "dirt balls") 

如何使用字符串在 CPP 中定义"或"?

TY :-(

今天的许多编程语言(C,C++,Swift,C#,Java,JavaScript,PHP(共享C的大括号语法和运算符语法。

  • 短路逻辑 OR 的语法是双管道:||
  • 非短路逻辑 OR 的语法是单管道:|(这也用于按位 OR 操作(。
  • 此外,&&用于短路逻辑 AND,&用于非短路逻辑 AND 或按位 AND。
  • ^是异或(而不是幂(。

与其他语言一样,C++没有内置功能来允许您将单个左侧值与多个右侧值进行比较,因此您需要重复左侧值。

这样:

if( TypedAnswerOne == "dirtballs" || TypedAnswerOne == "Dirt Balls" || TypedAnswerOne 
== "dirt balls" )

C 和C++ 不支持switch语句中的字符串,这与 Java、C#、Swift 和 PHP 不同

。顺便说一句,您应该使用不区分大小写的字符串比较,而不是自己定义所有可能的值。

您必须在大小写之间定义 OR,而不是在字符串之间定义 OR。因此,例如:

if (x == "dirtbag" || x == "dirt bag")

您可以根据需要拥有任意数量的OR,但它开始变得混乱。发生这种情况时,您可能更喜欢开关情况:

switch(x) {
case "dirtbag" : ...; // do something
case "dirt bag" : ...; // do something
}

如果您愿意使用预先存在的库并且不想处理所有情况(听起来可能有很多!(,您总能找到适合您需求的库,并且可能会在比较之前处理字符串(将其设置为小写,删除空格等(。祝你好运!

对于超过几个可能的值,我倾向于将它们放在容器中并使用算法:

#include <algorithm>
#include <iterator>
#include <array>
#include <string>
#include <iostream>
template <typename T, std::size_t N, typename U>
bool includes(const std::array<T, N>& arr, const U& value)
{
return std::find(std::cbegin(arr), std::cend(arr), value) != std::cend(arr);
}
struct in_tag {} in;
template <typename U>
struct in_op_temporary { const U& value; };
template <typename U>
in_op_temporary<U> operator<(const U& lhs, in_tag rhs) { return {lhs}; }
template <typename U, typename T, std::size_t N>
bool operator>(in_op_temporary<U> lhs, const std::array<T, N> rhs)
{
return includes(rhs, lhs.value);
}
int main()
{
const std::array<std::string, 3> answers {
"dirtballs", "Dirt Balls", "dirt balls"
};
if ("Dirt Balls" <in> answers) 
std::cout << "success!" << std::endl;
if (not ("DirtBalls" <in> answers)) 
std::cout << "success!" << std::endl;
}

住在科里鲁

但是对于这个特定问题,我建议找到一种更通用的方法来解释字符串中的错误。