2012-04-16 79 views
-2

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

例如,如果用户输入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; 
    } 
} 
+0

我可以建议你修复功能的压痕,尤其是添加缺少的结束括号? – 2012-04-16 09:27:48

+0

'y'的上界是什么?可能我们超过了字母* a-z *。那么该怎么办? – 2012-04-16 09:34:36

回答

4

使用的字符代码表示,事实上,“B” ==“A” + 1(等等)。

如果你有一个从零开始的索引我,你想将其转换成字母,它确实是印刷“一” + I.如果你想让它在瓶盖,印刷“A” + I.容易

还要注意的是,你真的可以简化这些循环。没有理由嵌套三个循环。第一行需要一个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,等等),并填写与载体。然后,如果单元格值为零,则输入if条件以打印下划线,否则直接输出单元格值。

+0

你..即时通讯这方面的工作,并尝试修复我的代码。 。当我尝试打印这些字母时,它会打印出ASCII码..你知道我必须做什么吗? – nick 2012-04-16 09:39:03

+0

这种方式可以访问我的元素吗?例如,如果我想在5列中添加一个数字? – nick 2012-04-16 09:51:22

+0

@nick:将字母转换为char类型;忘记了,对不起(将更新代码示例)。如果你想在你的单元格中有数据,你需要遵循Luchian Grigore的建议并动态地分配内存(或者使用std :: vector)。 – 2012-04-16 10:07:28

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,它可能是更适合你究竟是什么这样做。

+0

如果他只是想打印出来,没有理由分配任何东西;还是我误解了这个问题? – 2012-04-16 09:31:25

+0

@seanmiddleditch'char th [x] [y];'在C++中是非法的。 – 2012-04-16 09:31:54

+0

但是没有理由甚至只是为了打印而打印该数组。 – 2012-04-16 09:33:05