C++ 关于字符串,如何使用或与if语句一起使用

C++ 关于字符串,如何使用或与if语句一起使用,c++,string,C++,String,我想做一个if语句来比较两个字符串,看看它们是否匹配。 因此: 如果键入的正确答案与CorrectAnswerOne字符串值中的正确答案完全相同,则该代码有效。 没问题 然而。。。如果键入的答案稍有不同,例如一个单词而不是两个单词,则表明答案是错误的 所以我想知道我怎样才能用字符串做“或” 因此: 如何用字符串定义CPP中的“或” TY:-)如果不关心大小写或额外的空格,则首先要删除所有空格,然后在不区分大小写的基础上比较字符串 您可以像这样删除空白 然后比较不区分大小写的字符串 一般来说,解决

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

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

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

所以我想知道我怎样才能用字符串做“或”

因此:

如何用字符串定义CPP中的“或”


TY:-)

如果不关心大小写或额外的空格,则首先要删除所有空格,然后在不区分大小写的基础上比较字符串

您可以像这样删除空白

然后比较不区分大小写的字符串

一般来说,解决编程问题的策略是用谷歌搜索它。例如:

  Google: "c++ remove whitespace from string"
  Google: "c++ string compare case insensitive"
if (x == "dirtbag" || x == "dirt bag")

<> P>当今的许多编程语言(C,C++,Swift,C,java,JavaScript,PHP)共享C的卷曲括号语法和操作符语法。
  • 短路逻辑OR的语法是双管:
    |
  • 非短路逻辑OR的语法是单管:
    (这也用于按位OR操作)
  • 此外,对于短路逻辑AND,使用
    &
    ;对于非短路逻辑AND,使用
    &
    或按位AND
  • ^
    是异或(而不是异或)
与这些其他语言一样,C++没有内置功能来比较单个左侧值和多个右侧值,因此需要重复左侧值

像这样:

if( TypedAnswerOne == "dirtballs" || TypedAnswerOne == "Dirt Balls" || TypedAnswerOne 
 == "dirt balls" )
与Java、C#、Swift和PHP不同,顺便说一句


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

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

  Google: "c++ remove whitespace from string"
  Google: "c++ string compare case insensitive"
if (x == "dirtbag" || x == "dirt bag")
你可以有你想要的任意多的ORs,但它开始变得混乱。发生这种情况时,您可能更喜欢开关箱:

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;
}
#包括


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

btw,C++几乎从来没有被称为“CPP”。您可能会看到
.cpp
用作文件扩展名,但这仅仅是因为在文件名中使用加号会导致问题。提示:制作一个容器(例如
std::vector
)以显示您想要的匹配项,然后检查您想要的字符串是否在该列表中。如果你只是在匹配简单的变体,也许你想要的是一个更宽松的正则表达式,或者你想要清理输入、剥离空格和下框等,以便更广泛地匹配。@tadman如果我们要让OP开始使用STL,这样的比较最好用<代码> STD::unOrdEdEdTys具有不区分大小写的哈希函数。C++ DAI C++在没有标准库的情况下是相当糟糕的,因此学习它是必不可少的。关于<>代码> STD::OnDead EdSub 的一个很好的建议。你应该从一本书中学习C++,它将教你如何使用“如果”StastSc++不支持在<代码> Switch()/Cuth>语句中使用字符串。只能使用整数值,因为
switch
语句通常编译为本机跳转表。像C#和Java这样的语言将字符串开关语句编译为运行时生成的
Map
Dictionary
查找。噢,谢谢!我使用C++已经有一段时间了,显然忘记了。推荐人们找到答案的答案不是真正的答案。“一般来说,解决编程问题的策略是谷歌。”这是错误的——坏策略给人一条鱼,或者教他如何钓鱼。只是想从长远来看有所帮助(我也给他指出了答案)。