Как использовать оператор OR с if в отношении строк - PullRequest
0 голосов
/ 26 января 2020

Я хочу сделать оператор if, чтобы сравнить две строки, чтобы увидеть, совпадают ли они. Итак:

if (TypedAnswerOne == CorrectAnswerOne)

Код работает, если правильный ответ набирается ТОЧНО, как в строковом значении CorrectAnswerOne. Никаких проблем.

Однако ... если ответ набирается немного по-другому, например, одним словом вместо двух слов, то это показывает, что ответ неправильный.

Так что я был интересно, как я могу сделать "ИЛИ" со строками?

Итак:

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

Как я могу определить "или" в CPP со строками?

TY: -)

Ответы [ 5 ]

0 голосов
/ 26 января 2020

Финальная игра здесь. Все получилось в итоге: https://youtu.be/Kk7NQc8hObo

0 голосов
/ 26 января 2020

Для более чем двух возможных значений я склонен помещать их в контейнер и использовать алгоритм:

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

Live On Coliru

Но для этой конкретной проблемы я бы предложил найти более общий способ учета ошибок в строке.

0 голосов
/ 26 января 2020

Сегодня многие языки программирования (C, C ++, Swift, C#, Java, JavaScript, PHP) имеют синтаксис фигурных скобок C и синтаксис операторов.

  • Синтаксис для короткозамкнутого логического ИЛИ - это двойной канал: ||.
  • Синтаксис для короткозамкнутого логического ИЛИ - это один канал: | (это также используется для побитовых операций ИЛИ).
  • Кроме того, используйте && для короткозамкнутого логического И и & для не замкнутого логического И или побитового И.
  • ^ - это XOR (а не по мощности).

C ++, как и эти другие языки, не имеет встроенной функции, позволяющей сравнивать один левый -значение с несколькими правыми значениями, поэтому вам нужно повторить левое значение.

Примерно так:

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

C и C ++ не поддерживают строки в switch выражениях в отличие от Java, C#, Swift и PHP, кстати.

Кстати, вы должны использовать сравнение строк без учета регистра вместо определения al Я сам могу оценить возможные значения.

0 голосов
/ 26 января 2020

Вы должны определить ИЛИ между случаями, а не между строками. Так, например:

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

Вы можете иметь столько OR, сколько хотите, но это начинает становиться грязным. Когда это происходит, вы можете предпочесть вариант переключения:

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

Если вы открыты для использования уже существующих библиотек и не хотите обрабатывать все случаи (похоже, что может быть много!) вы всегда можете найти тот, который соответствует вашим потребностям и, возможно, обрабатывает строку перед сравнением (установка в нижний регистр, удаление пробелов и т. д. c). Удачи!

0 голосов
/ 26 января 2020

Если вас не волнует ни верхний, ни нижний регистр, ни лишние пробелы, то сначала нужно удалить все пробелы, а затем сравнивать строки без учета регистра.

Вы можете удалить пробелы, например this .

Затем строка без учета регистра сравнивается как this .

В общем, стратегия для решения программных задач - это поиск в Google. Например:

  Google: "c++ remove whitespace from string"
  Google: "c++ string compare case insensitive"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...