将给定字符串与结果进行比较

标签 c

我目前正在编写 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/

相关文章:

c - 此代码在 Turbo C 上运行但不在 gcc 编译器上运行?

c - 标记结构初始化、函数及其参数

c - 在 C 中的两个文件之间包含 header 的正确方法是什么

c - 如何让 GCC __attribute__ ((constructor)) 在 OSX 下工作?

c++ - 为什么 C++ 回调 C 函数需要 "extern C"?

c++ - 如何在此函数中使用 millis() 而不是 for 循环

c - 读取和添加从 C 文件中读取的整数

c - windows内核调试

c - 在 C 中以十六进制形式读取文件

c++ - 在写入高带宽数据流时如何最好地管理 Linux 的缓冲行为?