在C语言中查找二维数组

3
我仍在学习 C 编程,需要一些帮助。我正在尝试编写一个程序,以在二维字符数组中进行搜索,并告诉您所搜索的字符在二维数组中相对于 (x,y) 坐标的位置。我的问题是程序不能输出正确的 (x, y) 坐标。 现在我认为程序应该输出 B 的 (1,0),(1,1),(1,2),(1,3),(1,4)。我还计划调整坐标,使其从1开始计数,而不是从0开始,例如,对于B,输出应为 (2,1),(2,2),(2,3),(2,4),(2,5)。到目前为止,唯一正确输出的坐标是 (1,1),我不确定代码出了什么问题。我应该怎么做来解决这个问题?
完整代码如下:
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 5
#include <stdio.h>


int main()
{
    int c, count = 0;
    int x[SIZE] = { 0 };
    int y[SIZE] = { 0 };

    int j, i;
    char array[SIZE][SIZE] = { { 0 }, { 0 } };
    char array2[SIZE] = { 'A', 'B', 'C', 'D', 'S' };
    char search;

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {

            array[i][j] = array2[j];
        }
    }

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("%c ", array[i][j]);
        }
        printf(" \n");
    }

    printf("What letter are you lookiong for? ");
    scanf("%c", &search);


    for (j = 0; j < 5; j++)
    {
        for (c = 0; c < 5; c++)
        {
            if (array[j][c] == search)
            {
                y[j] = j;
                x[c] = c;
                count++;
            }
        }
    }

    if (count == 0)
        printf("%c is not present in array.\n", search);
    else
    {
        for (i = 0; i < count; i++)
        {

            printf("%c is present at (%d , %d) times in array.\n", search, x[i], y[i]);
        }

    }



    return 0;
}

文本窗口的截图毫无用处。每次你发一个截图,上帝就会杀死一只熊猫。截图不能进行grep操作,不能进行diff对比,不能选择其中的文本,而且还浪费了我的带宽。请不要再发布这些东西。 - n. m.
1
请注意,在 C 语言中,您使用 array[row][column] 的方式来访问数组元素,而您所偏爱的答案似乎使用了 Array(Column,Row)(或 A(C,R))的表示法。这只是一种表现形式的问题,但如果您使用 A(C,R) 表示法,很可能会感到困惑。至少,您需要意识到这种行为。 - Jonathan Leffler
@n.m. 为什么我要在意它浪费了 你的 带宽?如果我们不应该发布屏幕截图,那么这个网站为什么会有这个选项呢?请不要发表讽刺的言论。 - T.Malo
我真是太蠢了。你确实不应该在意那些想要帮助你的人怎么想。利用他们,然后抛弃他们。这是他们应得的。 - n. m.
@m.n,我在上面和下面都没有看到你的回答。我感谢每一个帮助我的人,并考虑他们所说的话。而你所做的只是抱怨。 - T.Malo
显示剩余2条评论
3个回答

2

将此更改为:

y[j] = j;
x[c] = c;

对于这个问题:

y[count] = j;
x[count] = c;

数组 xy 是您的结果,它们必须根据结果数量进行索引。

1

将你的代码修改如下就可以正常运行:

尝试以下代码:

int flag = 0; 

printf("What letter are you lookiong for? ");

scanf("%c", &search);


for (j = 0; j < 5; j++)
{
    for (c = 0; c < 5; c++)
    {
        if (array[j][c] == search)
        {
           printf("%c is present at (%d , %d) times in array.\n", search, j, c);
           flag = 1;
        }
    }
}

if (flag == 0)
    printf("%c is not present in array.\n", search);

感谢您的帮助。 - T.Malo

1

您的代码中的这个语句,

y[j] = j;
x[c] = c;

将y []中j位置的元素和x []中c位置的元素更改为j和c。

B出现在0,1处,也出现在1,1等处。

因此,对于'B'的第一轮循环,当j为0时,c变为1,y [0]的值将被初始化为0,x [1]为1。(因为在0,1处搜索为TRUE)

再次进行循环并且j变为1且c变为1时,y [1]变为1,并且x [1]再次为1(被覆盖,因为在上一个循环中我们做了相同的操作)。

因为对于所有的j,0到4,'B'的c值都为1。

因此,对于y [0to4]的每个值,即0,1,2,3,4,我们都连接到相同的c [1],它是1。

但是当您打印结果时,您正在打印错误的结果对,您正在将y [0]与x [0]打印(尽管您从未在x [0]中保存任何值,所有值均保存在x [1]中,用于 'B'),y [1]与x [1]等。

这样只有一个结果是正确的,那就是y[1]和x[1]的值,即(1,1)。
其他所有值,y[0,2,3,4]都是0,2,3,4,但x[0,2,3,4]都是0,0,0,0。

所以,你的逻辑是错误的,应该改为:

y[count]=j;
x[count]=c;

现在,对于“B”,我们将值j即0保存在y [0]中,c即1保存在x [0]中。因此,当我们打印结果时,我们得到正确的位置对,并且对于y [n] = 0,1,2,3,4的每个值,我们在x [n]中保存了一个值= 1,1,1,1,1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接