Как проверить, равен ли массив некоторому набору значений - PullRequest
0 голосов
/ 10 декабря 2018

Я знаю, что это немного странно задавать такой вопрос, но это меня раздражает!

char winnerCheck[5];
if (winnerCheck=={'X','X','X','X','X'})
{
    cout<<second<<", you won the game!"; 
}

это дает мне ([Error] expected primary-expression before '{' token) для второй строки.

Спасибо взаранее

Ответы [ 6 ]

0 голосов
/ 10 декабря 2018

Несмотря на то, что было предложено несколько ответов, не создавайте временный контейнер (std::vector или std::string) из массива winnerCheck.Построение и уничтожение этих контейнеров добавляет много разрушений.Вместо этого используйте алгоритм:

static const char winner[5] = { `X`, `X`, `X`, `X`, `X` };
char winnerCheck[5] = whatever;
if (std::equal(std::begin(winner), std::end(winner), winnerCheck))
    std::cout << “You won the game\n”;
0 голосов
/ 10 декабря 2018

Вы можете просто использовать std :: string, как показано ниже:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    char winnerCheck[2];
    winnerCheck[0] = 'X';
    winnerCheck[1] = 'X';
    if(std::string(winnerCheck) == std::string({'X','X'}))
    {
        cout<<"you won the game"<<endl;
    }
    return 0;
}
0 голосов
/ 10 декабря 2018

Уйдите от устаревших массивов C.Используйте std::array и все просто:

std::array<char, 5> winnerCheck;;
if (winnerCheck == std::array{'X','X','X','X','X'})
{

}

Если у вас еще нет C ++ 17, вам просто нужно добавить аргументы шаблона std::array:

std::array<char, 5> winnerCheck;;
if (winnerCheck == std::array<char, 5>{'X','X','X','X','X'})
{

}
0 голосов
/ 10 декабря 2018

Если вы хотите проверить, все ли символы одинаковы или нет, как в вашем примере, вы также можете использовать std::all_of следующим образом:

DEMO

if (std::all_of(std::begin(winnerCheck), std::end(winnerCheck),
                [](char x) { return (x == 'X'); }))
{
    std::cout << "You won the game!"; 
}
0 голосов
/ 10 декабря 2018

Вы не можете сравнивать содержимое массивов Си таким образом.Там нет никакого синтаксиса, чтобы сделать это.

Я предлагаю вам использовать функцию для проверки победителя.Вот пример, он взорвется, если вы передадите функции пустой указатель, но остановится, как только две строки станут разными.

#include <iostream>
#include <vector>

bool isWinner(char *playerStr)
{
  static const char winningStr[5] = { 'X','X', 'X', 'X', 'X' };

  for (int i = 0; i < 5; i++)
    {
      if (playerStr[i] != winningStr[i])
        {
          return false;
        }
    }
  return true;
}

int main()
{
  std::cout << isWinner("abdce") << std::endl;
  std::cout << isWinner("XYZXX") << std::endl;
  std::cout << isWinner("XXXXZ") << std::endl;
  std::cout << isWinner("XXXXX") << std::endl;

  return 0;
}
0 голосов
/ 10 декабря 2018

Самый прямой путь должен быть:

if (winnerCheck[0] == 'A' && winnerCheck[1] == 'B' ...) 
...