2014-12-28 116 views
-2
0 1 2 
- - - - - 
0| 1 2 3 
1| 4 5 6 
2| 7 8 9 

如何確定此二維數組中的任意數字的座標?在2D陣列中查找值

例如,如果我想知道數字9的座標,它將是[2][2]

我怎麼能通過C++程序上的代碼來做到這一點?

+0

我不知道我米看,什麼二維數組? –

+0

@VladfromMoscow現在是。刪除我以前的評論,因爲它與問題的新主體無關。 –

回答

1

基本上你需要通過檢查數組來檢查每個單元格的內容。

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}); 
    for(int x=0;x<3;++x) 
     for(int y=0;y<3;++y) 
      if(a[x][y] == 9) 
       cout << "9 found at ["<<x<<"]["<<y<<"]\n"; 
1

如果你可以用std::vector<std::vector<int>>相反,它應該是:

std::vector<std::vector<int>> vec = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
for (int i = 0; i < vec.size(); i++) 
{ 
    auto it = std::find(vec[i].begin(), vec[i].end(), 9); 
    if (it != vec[i].end()) 
    { 
     std::cout << "Number 9 found at vec[" << i << "][" << std::distance(vec[i].begin(), it) << "]."; 
    } 
} 
1

這裏有兩種方法。第一個使用標準算法,第二個使用普通循環。

#include <iostream> 
#include <algorithm> 
#include <iterator> 

int main() 
{ 
    const size_t N = 3; 
    int a[N][N] = 
    { 
     { 1, 2, 3 }, 
     { 4, 5, 6 }, 
     { 7, 8, 9 } 
    }; 

    int value = 9; 

    auto it = std::find(reinterpret_cast<int *>(a), 
         reinterpret_cast<int *>(a) + N * N, 
         value); 

    if (it != reinterpret_cast<int *>(a) + N * N) 
    { 
     size_t n = std::distance(reinterpret_cast<int *>(a), 
            it); 
     std::cout << "Row = " << n/N << ", Column = " << n % N << std::endl; 
    } 

    size_t row = 0; 
    size_t col = 0; 

    for (; row < N; row++) 
    { 
     col = 0; 
     while (col < N && a[row][col] != value) col++; 
     if (col != N) break; 
    } 

    if (row != N) 
    { 
     std::cout << "Row = " << row << ", Column = " << col << std::endl; 
    } 

    return 0; 
} 

輸出是

Row = 2, Column = 2 
Row = 2, Column = 2 

或者你可以寫一個函數如下方式

#include <iostream> 
#include <utility> 

const size_t N = 3; 

std::pair<size_t, size_t> find_position(const int (&a)[N][N], int value) 
{ 
    size_t row = 0; 
    size_t col = 0; 

    for (; row < N; row++) 
    { 
     col = 0; 
     while (col < N && a[row][col] != value) col++; 
     if (col != N) break; 
    } 

    return { row, col }; 
} 

int main() 
{ 
    int a[N][N] = 
    { 
     { 1, 2, 3 }, 
     { 4, 5, 6 }, 
     { 7, 8, 9 } 
    }; 

    int value = 9; 

    auto position = find_position(a, value); 

    if (position.first != N) 
    { 
     std::cout << "Row = " << position.first 
        << ", Column = " << position.second << std::endl; 
    } 

    return 0; 
} 

輸出是

Row = 2, Column = 2