【问题标题】:create matrix using character arrays in c++在 C++ 中使用字符数组创建矩阵
【发布时间】:2011-02-15 16:59:05
【问题描述】:

我有8个不同的数组,每个数组里面有8个字符,

        std::string str_v1 = v1.to_string();
        char arr_v1[9] = {0}; 
        std::copy(str_v1.begin(), str_v1.end(), arr_v1); // from str_v1 to str_v8

        std::string str_v8 = v8.to_string();
        char arr_v8[9] = {0}; 
        std::copy(str_v8.begin(), str_v8.end(), arr_v8); 

如何将其转换为 8x8 矩阵?我想逐列放置这些值,比如,每个数组都转换为矩阵的一列,比如array1到column1,array2到column2,依此类推,比如array1值将像matrix[0][0]一样放置, 矩阵[1][0], 矩阵[2][0] 等等.. 我认为,需要做这样的事情:

char matrix[8][8];
        for( int y=0;y<8;y++)
        {
                matrix[y][0] = arr_v1[y];
                matrix[y][1] = arr_v2[y];
                matrix[y][2] = arr_v3[y];
                matrix[y][3] = arr_v4[y];
                matrix[y][4] = arr_v5[y];
                matrix[y][5] = arr_v6[y];
                matrix[y][6] = arr_v7[y];
                matrix[y][7] = arr_v8[y];
        }

【问题讨论】:

  • 听起来像是作业...如果是这样,请重新标记您的问题并展示一些工作。
  • 你用的是什么矩阵库?升压.ublas?母语?本征?您是否正在实现自己的 Matrix 类?还是您指的是内置二维数组?

标签: c++ arrays matrix


【解决方案1】:
for( int y=0;y<8;y++)
        {
            for( int z=0;z<8;z++)
            {
             switch(y)
             {
             case 0:
             matrix[z][y] = arr_v1[z]; //Be pretty sure, possibly you are better than you believe
             break;                    // I've placed y before z as y is the outer loop, hence it 
             case 1:                   // should be responsible for ROWS and z for COLUMNS
             matrix[z][y] = arr_v2[z]; // Goes in matrix[0][1],[1][1],[2][1],[3][1]...[7][1]
             break;
             case 2:
             matrix[z][y] = arr_v3[z]; // Goes in matrix[0][2],[1][2],[2][2],[3][2]...[7][2]
             break;
             case 3:
             matrix[z][y] = arr_v4[z]; // Goes on
             break;
             case 4:
             matrix[z][y] = arr_v5[z]; // And on
             break;
             case 5:
             matrix[z][y] = arr_v6[z]; // And on
             break;
             case 6:
             matrix[z][y] = arr_v7[z];
             break;
             case 7:
             matrix[z][y] = arr_v8[z];
             break;
             }
            }  // Finally all 8 1x8 arrays stored into single 8x8 matrix
        }

你有它然后你的方式,每个 1x8 以 COLUMN 的形式出现,而不是像前一个那样的一行 :)

【讨论】:

  • 是的,谢谢:) 但还有另一个问题,比如“arr_v1...arr_v8”上有一个循环,并且这个循环运行了很多次。我想要的是在每次循环运行时向矩阵添加值。任何想法,怎么可能?谢谢:)
  • 对不起,这次没接听,请您再解释一下。
【解决方案2】:
char *matrix[9];
for (int i = 0; i < 9; ++i) {
    matrix[i] = new char[9];
    std::copy(your_ith_string.begin(), your_ith_string.end(), matrix[i]);
}
//Finish your work with the matrix
for (int i = 0; i < 9; ++i) {
    delete[] matrix[i];
}

【讨论】:

    【解决方案3】:

    你自己说的很对:

    for( int y=0;y<8;y++)
            {
                for( int z=0;z<8;z++)
                {
                 switch(y)
                 {
                 case 0:
                 matrix[y][z] = arr_v1[z]; //Be pretty sure, possibly you are better than you believe
                 break;                    // I've placed y before z as y is the outer loop, hence it 
                 case 1:                   // should be responsible for ROWS and z for COLUMNS
                 matrix[y][z] = arr_v2[z]; // Goes in matrix[1][0],[1][1],[1][2],[1][3]...[1][7]
                 break;
                 case 2:
                 matrix[y][z] = arr_v3[z]; // Goes in matrix[2][0],[2][1],[2][2],[2][3]...[2][7]
                 break;
                 case 3:
                 matrix[y][z] = arr_v4[z]; // Goes on
                 break;
                 case 4:
                 matrix[y][z] = arr_v5[z]; // And on
                 break;
                 case 5:
                 matrix[y][z] = arr_v6[z]; // And on
                 break;
                 case 6:
                 matrix[y][z] = arr_v7[z];
                 break;
                 case 7:
                 matrix[y][z] = arr_v8[z];
                 break;
                 }
                }  // Finally all 8 1x8 arrays stored into single 8x8 matrix
            }
    

    希望这会有所帮助,如果它不只是让我知道,我很乐意提供帮助。

    【讨论】:

    • 谢谢。但是,我想要它的另一种方式。比如,我想逐列插入值,比如 arr_v1 应该是矩阵的第一列,arr_v2 应该是第二列等等,所以 arr_v8 应该是第 8 列。
    • @bijlikamasla:然后在每种情况下翻转 Y 和 Z。
    【解决方案4】:
    char matrix[8][8];
    char *arr[8] = {arr_v1, arr_v2, arr_v3, arr_v4, arr_v5, arr_v6, arr_v7, arr_v8};
    for( int y=0;y<8;y++) {
        for (int i = 0; i < 8; ++i) {
            matrix[y][i] = arr[i][y];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      相关资源
      最近更新 更多