C中的二维数组搜索

时间:2014-04-20 05:37:41

标签: c arrays multidimensional-array

我还在学习C并且可以使用一些帮助。我正在尝试编写一个程序,用于搜索二维char数组。并让它告诉你搜索的char与(x y)坐标中的2D数组相关的点。我的问题是程序没有输出正确的(x y)坐标。 enter image description here 现在我认为该程序应该为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;
}

3 个答案:

答案 0 :(得分:2)

改变这个:

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

为此:

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

数组xy是您的结果,必须根据结果数量编制索引。

答案 1 :(得分: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);

答案 2 :(得分: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。

但是当你打印结果时,你正在打印错误的一对结果,你用x [0]打印y [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,即y [0]为0,c为x,0为0 [0]。 因此,当我们打印结果时,我们得到正确的位置对,并且对于y [n] = 0,1,2,3,4的每个值,我们有一个保存在x [n] = 1,1,1,1中的值,1