【问题标题】:2D array search in CC中的二维数组搜索
【发布时间】:2014-06-04 10:09:49
【问题描述】:

我仍在学习 C 并且可以使用一些帮助。我正在尝试编写一个程序来搜索二维字符数组。并让它告诉您搜索的 char 与 (x y) 坐标中的 2D 数组相关的点。我的问题是程序没有输出正确的(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 截图,你不能区分它们,你不能在其中选择文本,而且它们会浪费 my 带宽。请不要发布这些内容。
  • 请注意,在 C 语言中,您使用 array[row][column] 而您的首选答案似乎使用 Array(Column,Row)(或 A(C,R))表示法。这是一个表示问题,但如果您使用 A(C,R) 表示法,您可能会感到困惑。至少,您需要注意这种行为。
  • @n.m.我为什么要关心它是否会浪费您的带宽?如果我们不打算发布屏幕截图,那么为什么这个网站会有他们的选项?请不要发布刻薄的东西。
  • 我多么愚蠢。你真的不应该关心那些想要帮助你的人的想法。使用它们并丢弃它们。为他们服务。
  • @m.n 我看不到你在下面或上面的答案。我感谢所有帮助我并考虑到他们所说的话的人。你所做的一切都是抱怨。

标签: c arrays multidimensional-array


【解决方案1】:

改变这个:

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

为此:

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

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

【讨论】:

    【解决方案2】:

    像这样更改你的代码,它会正常工作:

    试试这个:

    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);
    

    【讨论】:

    • 感谢您的帮助。
    【解决方案3】:

    你的代码的这个语句,

    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] for 'B' ), y[1] with x[1] etc.

    这种方式只有一个结果是正确的,即 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.

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2023-03-06
      相关资源
      最近更新 更多