C++ const char if-statement

时间:2015-05-12 23:45:03

标签: c++ string if-statement char const

So I'm trying to get this program that will say good or bad depending on your answer and I didn't want to have a really long if and else if statement with a bunch of strings so I put a bunch of possible answers in two chars and I want it to answer depending on what you say. The program only replies to the good answers saying good even if you enter in one of the bad answers.

<head>
    ...
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    ...
</head>
<body>
    ...
    <div class='g-recaptcha' data-sitekey='PUBLIC_KEY'></div>
    ...
</body>

3 个答案:

答案 0 :(得分:1)

尝试:

if ((strcmp(input.c_str(), good[0]) == 0) ||
    (strcmp(input.c_str(), good[1]) == 0) ||
...
    (strcmp(input.c_str(), good[4]) == 0))

或者更好地将关键字切换为字符串,

const string good[5] = {
    "good", "great", "amazing", "amazing!", "fantastic"
};

然后

if ((input == good[0]) ||
    (input == good[1]) ||
...
    (input == good[4]))

甚至更好,将关键字打包成一组

const set<string> good{"good", "great", "amazing", "amazing!", "fantastic"};

然后

if (good.find(input) != good.end())

答案 1 :(得分:1)

这个:if (input01 == good[0 > 5] || good[0 < 5])可能没有达到你的期望(因为我无法想象想要它真正做的事情)。

0 > 5被评估为0是否大于5的测试。因为它显然不是,所以产生错误。由于它在需要整数的上下文中使用,因此它被转换为0,因此表达式的一部分变为if (input01 == good[0]

同样,0 < 5测试0是否小于5(显然是),因此结果为true,转换为1,因此表达式的一部分为good[1]。由于 反过来被用作布尔表达式,因此它被视为等同于good[1] != 0

所以你总体来说是if (input01 == good[0] || good[1] != 0)

这似乎非常接近无用,我很确定它不是你想要的。特别是,good[1]是一个指针。当且仅当它是空指针时,指针才会比较等于0。由于它被初始化为指向某个东西,因此它不是空指针,因此表达式的一部分将始终被评估为真。

当然,你的其他if陈述同样毫无用处。

如果您想检查input01是否与good中的任何项目相同,您可能(例如)使用std::find

if (std::find(std::begin(good), std::end(good), input01) == std::end(good))
    // input01 was not present in `good`.

为了使这项工作正常,您将要使用std::string s:

std::vector<std::string> good{"good", "great", "amazing", "amazing!", "fantastic"};

只有5个项目有点毫无意义,但如果您列出的goodbad字词可能会非常大,那么排序可能会更好他们,然后使用std::binary_search,或者使用std::unordered_set代替。

答案 2 :(得分:0)

为什么不检查input01是否在您的阵列中。您应该能够使用find()函数执行此操作。像

这样的东西
if(std::find(std::begin(good), std::end(good), input01) != std::end(good))){do something}

您可能不需要std :: references