如何检查数组是否等于一组值

时间:2018-12-10 15:03:28

标签: c++ arrays if-statement compiler-errors

我知道问这样一个问题似乎有点奇怪,但这很烦我!

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

第二行给我([Error] expected primary-expression before '{' token)。

预先感谢

6 个答案:

答案 0 :(得分:3)

远离旧式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'})
{

}

答案 1 :(得分:2)

您可以简单地使用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;
}

答案 2 :(得分:1)

最直接的方法应该是:

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

答案 3 :(得分:1)

您不能像这样比较C数组的内容。没有任何语法可以这样做。

我建议您使用一个函数来检查获胜者。这是一个例子,如果给传递函数一个空指针,它将崩溃,但是一旦两个字符串不同,它就会停止。

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

答案 4 :(得分:1)

如果要像示例一样检查所有字符是否相同,也可以按以下方式使用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!"; 
}

答案 5 :(得分:1)

尽管有几个建议,但不要从std::vector数组中创建一个临时容器(std::stringwinnerCheck)。构造和销毁这些容器会增加很多麻烦。而是使用一种算法:

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”;
相关问题