代码之家  ›  专栏  ›  技术社区  ›  User987

在C中转置2D数组++

  •  0
  • User987  · 技术社区  · 7 年前

    我有一个2D静态数组,看起来像这样:

    1 1 1 1 1 1 
    2 2 2 2 2 2 
    3 3 3 3 3 3 
    4 4 4 4 4 4 
    5 5 5 5 5 5 
    6 6 6 6 6 6 
    

    1 2 3 4 5 6 
    1 2 3 4 5 6 
    1 2 3 4 5 6 
    1 2 3 4 5 6 
    1 2 3 4 5 6 
    1 2 3 4 5 6
    

    for (int i = 0; i < 6; ++i)
        for (int j = 0; j < 6; ++j)
            copyArray[i * 6 + j] = array[j * 6 + i];
    

    但是对于一个10x10的阵列,我该怎么做呢?

    3 回复  |  直到 7 年前
        1
  •  3
  •   frslm    7 年前

    你在找这样的东西吗

    int array[10][10], copyArray[10][10];
    
    ... // (fill array here)
    
    for (int i = 0; i < 10; ++i)
        for (int j = 0; j < 10; ++j)
            copyArray[j][i]= array[i][j];
    
        2
  •  2
  •   boriaz50    7 年前

    您应该使用二维数组。

    #include <iostream>
    using namespace std;
    
    const int N = 10;
    
    int main()
    {
        int a[N][N];
        int b[N][N];
    
        // fill matrix
        cout << "Input matrix:" << endl;
        for (int i = 0; i < N; ++i)
            for (int j = 0; j < N; ++j)
                cin >> a[i][j];
    
        // transpose matrix
        for (int i = 0; i < N; ++i)
            for (int j = 0; j < N; ++j)
                b[i][j] = a[j][i];
    
        // print matrix
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < N; ++j)
            {
                cout << b[i][j] << ' ';
            }
    
            cout << endl;
        }
    
        return 0;
    }
    
        3
  •  0
  •   John Sick    6 年前

    #include <iostream>
    
    using namespace std;
    
    int main(){
    int n,m;
    cin>>n>>m;
    
    int arr_1[n][m];
    int arr_2[n][m];
    
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>arr_1[i][j];
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
    
            cout<< arr_1[j][i]<<' ';
        }
        cout<<endl;
    }
    
    }