在C 2-D数组中找到一个以上的索引索引

时间:2013-06-05 13:48:57

标签: c++ arrays

我是C的新手,但我在matlab中有一些很好的技能。在matlab中我可以使用[x,y]=find(matrix==any_value)并返回许多xy - 给定值的索引(如果此值存在于矩阵中)。

我尝试了一些函数作为find,但我读到的是它只返回矩阵中第一次出现的索引。

假设我在C中有一个二维数组,其中包含一些重复值,如何在此矩阵中找到重复值的xy坐标?

3 个答案:

答案 0 :(得分:2)

在C中你只能返回一个值。结果是夫妻,你需要不止一个。我声明了一个点结构并填充了这些对象的数组;该函数将返回找到的结果数...以帮助您入门,例如:

struct point {
  int x;
  int y;
};

int find_stuff(int* mat[], int dimX, int dimY, int desired, struct point out[])
{
    int ret=0;
    int x, y;

    for(y=0; y<;dimY; y++)
        for (x=0; x<dimX; x++)
            if (mat[y][x] == desired) {
                out[ret].x = x;
                out[ret].y = y;
                ret++;
            }

    return ret;
}

void test_the_function(int* mat[], int dimX, int dimY, int desired)
{
    struct point results[100];
    int i,n;

    n = find_stuff(mat, dimX, dimY, desired, results);

    for (i=0; i<n; i++)
        printf("%i\t(%i, %i)\n", i, results[i].x, results[i].y);
}

答案 1 :(得分:1)

您必须编写自己的函数,因为C没有用于查找元素的内置函数。 找到第一个实例后,此函数不会“中断”,但会一直持续到列表末尾。

保留一系列空白索引。 indices[] 每当找到元素时,将其推入此索引数组。 在函数结束时,您将所有索引整齐地存储在x,y坐标(或索引)的数组中。

答案 2 :(得分:1)

你可以这样做:

#include <vector>
#include <utility>
#include <iostream>

using namespace std;

int main(void)
{
    const double val = 3.14;
    double a[100][100];
    /* ... initialize a somehow ... */
    vector<pair<int,int>> pos;

    for ( int x = 0; x < 100; ++x )
        for ( int y = 0; y < 100; ++y )
            if ( a[x][y] == val )
                pos.push_back( make_pair(x,y) );

    std::for_each( v.begin(), v.end(), [](pair<int,int> p){
        cout << '(' << p.first << ',' << ')' << endl;
    });
}