我是C的新手,但我在matlab中有一些很好的技能。在matlab中我可以使用[x,y]=find(matrix==any_value)
并返回许多x
和y
- 给定值的索引(如果此值存在于矩阵中)。
我尝试了一些函数作为find,但我读到的是它只返回矩阵中第一次出现的索引。
假设我在C中有一个二维数组,其中包含一些重复值,如何在此矩阵中找到重复值的x
和y
坐标?
答案 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;
});
}