我目前正在编写 Bulls and Cows 程序,我正在尝试找出如何将给定字符串与我得到的结果进行比较。 我将我的代码粘贴在这里,以便您更好地理解。 在代码上:我有一个字符测试,它是给定的字符串,我有几个结果。大约 1296 个结果。我想要它做的是将结果与字符测试进行比较,并告诉我它是否相同。(等于或不)。我希望我没有错过任何其他信息。如果我这样做了,请告诉我。谢谢:)
#include <stdio.h>
#include <string.h>
void initialize(int poss[1296][4]);
int main()
{
int table[1296][4];
char str[5];
char tmp[5];
int i, j, k;
int bull = 0;
int cow = 0;
char test[7]={"2 B 0 C"};
initialize(table);
printf("Enter 4 digits: ");
scanf("%s", str);
for (i=0; i<1296; i++) // building this table
{
strcpy(tmp, str); // copying string
for (j=0; j<4; j++)
{
for (k=0; k<4; k++)
{
if (table[i][j]==tmp[k]-'0' && j==k) // gets the string as an integer
{
tmp[k] = -1;
bull++;
break;
}
else if (table[i][j]==tmp[k]-'0' && j!=k)
{
tmp[k] = -1;
cow++;
break;
}
}
}
//printf ("Number: %d%d%d%d, Input: %s\n",table[i][0], table[i][1], table[i][2], table[i][3], str);
printf ("%d B %d C\n\n", bull, cow);
bull = 0;
cow = 0;
}
}
void initialize(int poss[1296][4])
{
int i=0;
int j, k=0;
int m;
while (i<=5)
{
for (j=0; j<216 ; j++)
{
poss[k][0]=i;
k++;
}
i++;
}
k=0;
i=0;
j=0;
while (k<1296)
{
for (m=0; m<6; m++)
{
for (j=0; j<6; j++)
{
for (i=0; i<36 ; i++)
{
poss[k][1]=j;
k++;
}
}
}
}
k=0;
i=0;
j=0;
m=0;
while (k<1296)
{
for (j=0; j<6; j++)
{
for (i=0; i<6; i++)
{
poss[k][2]=j;
k++;
}
}
}
k=0;
i=0;
j=0;
m=0;
while (k<1296)
{
for (i=0; i<6; i++)
{
poss[k][3]=i;
k++;
}
}
}
最佳答案
如果我理解正确的话,我认为有两种简单的测试方法:
1.
if ((bull == test[0] - '0') && (cow == test[4] - '0'))
// strings are equal
2.
char buffer[8];
sprintf(tempString, "%d B %d C", bull, cow);
if (strcmp(tempString, test) == 0)
// strings are equal
printf("%s\n\n", buffer);
我建议使用第一种方法,但是或者更好的是,添加这些:
int testBull = test[0] - '0';
int testCow = test[4] - '0';
并用它们进行测试,而不是在每一步中计算它们。
关于将给定字符串与结果进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20605694/