我该如何打印这个2D阵列?

时间:2012-04-16 09:24:21

标签: c++

我想用函数创建第二个数组;用户将输入尺寸(x,y),功能将打印出来;在第一行中必须出现数字1,2,3 ... x,在第一行中出现字符a,b,c,d,e .... y(y以数字形式给出)。

例如,如果用户输入x = 5 y = 7,则会打印:

  1 2 3 4 5 
a _ _ _ _ _
b _ _ _ _ _
c _ _ _ _ _
d _ _ _ _ _
f _ _ _ _ _
h _ _ _ _ _
i _ _ _ _ _

我写了一些代码,但我不知道如何使用这些字母。

void function(int x,int y)
{ 
    char th[x][y];

    for (int i = 1; i < x; i++)
    { 
       for (int j = 1; j < y; j++)
       {
          if(i==1 )
          {
            for (int k = 1; k < x; k++)
            {
               th[i][j]=k;
            }
          }
          else if(j==1)
          {
            th[i][j]='a';
          }
          else
          {
            th[i][j]='_';
          }
          std:: cout << th[i][j] <<'\t';
       }

       cout << std::endl;
    }  
 }

2 个答案:

答案 0 :(得分:4)

使用字符代码表示和'b'=='a'+ 1(等等)的事实。

如果您有一个从零开始的索引I,并且您希望将其转换为字母,那么它就像打印'a'+ I一样简单。如果您想要大写字母,请打印'A'+ I. / p>

另请注意,您可以真正简化这些循环。没有理由嵌套三个循环。第一行需要一个for循环(生成数字列标题),然后是剩余行的双重嵌套for循环。类似于以下(完全未经测试的)代码:

// print header
std::cout << ' ';
for (int i = 0; i != x; ++i)
  std::cout << ' ' << i;
std::cout << '\n';

// print body
for (int j = 0; j != y; ++j)
{
  // column leader
  std::cout << char('a' + j);

  // column body
  for (int i = 0; i != x; ++i)
    std::cout << " _";
  std::cout << "\n";
}

随着您希望在单元格中拥有数据,您需要为它们分配空间。如果Y行有X列,则需要X * Y单元格。您可以使用X * j + i对这些进行索引,其中i,j是要访问的列。类似的东西:

std::vector<int> cells(x * y);

// inside the loop, in place of printing " _", use:
std::cout << ' ' << cells(x * j + i);

如果要将下划线保留为“空”值,则需要选择一些整数来表示零值(零,负,INT_MAX,等等),然后用它填充向量。如果单元格值为nil值,则输入if条件以打印下划线,否则直接打印单元格值。

答案 1 :(得分:0)

完成后,您需要动态分配数组并释放内存:

char** th = new char*[x];
for ( int i = 0 ; i < x ; i++ )
   th[i] = new char[y];

//rest of the code

for ( int i = 0 ; i < x ; i++ )
   delete[] th[i];
delete[] th;

我必须建议您同时考虑std::vector,它可能更适合您实际所做的事情。