我知道问这样一个问题似乎有点奇怪,但这很烦我!
char winnerCheck[5];
if (winnerCheck=={'X','X','X','X','X'})
{
cout<<second<<", you won the game!";
}
第二行给我([Error] expected primary-expression before '{' token
)。
预先感谢
答案 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
:
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::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”;