0

我是 C 的新手,但我在 matlab 方面有一些不错的技能。在 matlab 中,我可以使用它,如果该值存在于矩阵中[x,y]=find(matrix==any_value),它会返回给我很多x和- 给定值的索引。y

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

假设我在 C 中有一个带有一些重复值的 double 二维数组,我怎样才能在这个矩阵中找到重复值的xy坐标?

4

3 回答 3

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);
}
于 2013-06-05T13:55:54.527 回答
1

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

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

于 2013-06-05T13:57:17.123 回答
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;
    });
}
于 2013-06-05T14:03:29.640 回答