C++ 关于字符串,如何使用或与if语句一起使用
我想做一个if语句来比较两个字符串,看看它们是否匹配。 因此: 如果键入的正确答案与CorrectAnswerOne字符串值中的正确答案完全相同,则该代码有效。 没问题 然而。。。如果键入的答案稍有不同,例如一个单词而不是两个单词,则表明答案是错误的 所以我想知道我怎样才能用字符串做“或” 因此: 如何用字符串定义CPP中的“或”C++ 关于字符串,如何使用或与if语句一起使用,c++,string,C++,String,我想做一个if语句来比较两个字符串,看看它们是否匹配。 因此: 如果键入的正确答案与CorrectAnswerOne字符串值中的正确答案完全相同,则该代码有效。 没问题 然而。。。如果键入的答案稍有不同,例如一个单词而不是两个单词,则表明答案是错误的 所以我想知道我怎样才能用字符串做“或” 因此: 如何用字符串定义CPP中的“或” TY:-)如果不关心大小写或额外的空格,则首先要删除所有空格,然后在不区分大小写的基础上比较字符串 您可以像这样删除空白 然后比较不区分大小写的字符串 一般来说,解决
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&
是异或(而不是异或)^
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++已经有一段时间了,显然忘记了。推荐人们找到答案的答案不是真正的答案。“一般来说,解决编程问题的策略是谷歌。”这是错误的——坏策略给人一条鱼,或者教他如何钓鱼。只是想从长远来看有所帮助(我也给他指出了答案)。