我想用函数创建第二个数组;用户将输入尺寸(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;
}
}
答案 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
,它可能更适合您实际所做的事情。