按矩阵打印字母

  • 本文关键字:打印 c++
  • 更新时间 :
  • 英文 :


现在我有这个代码

int main() {
int cols;
cout << "cols";
cin >> cols;
int rows;
cout << "rows";
cin >> rows;

char** charArray = new char*[rows];
for (int i = 0; i < rows; ++i) {
    charArray[i] = new char[cols];
}
// Fill the array
for (int i = 0; i < rows; ++i) {
    for (int j = 0; j < cols; ++j) {
        charArray[i][j] = char('1' + i + j );
    }
}
// Output the array
for (int i = 0; i < rows; ++i) {
    for (int j = i; j < cols ; ++j) {
        cout << charArray[i][j];
    }
    cout << endl;
}

// Deallocate memory by deleting
for (int i = 0; i < rows; ++i) {
    delete[] charArray[i];
}

,输出就像1 2 32 3 4

我怎么能成为1 2 34 5 6

我尝试了很多,我是编程中的新手,所以您能解释一下这个问题怎么回事!非常感谢!

只需更改以下内容:

charArray[i][j] = char('1' + i + j );

 charArray[i][j] = char('1' + i*cols + j);

btw:您在输出阵列循环中有错字:

for (int j = i; j < cols ; ++j) {

应该是:

for (int j = 0; j < cols ; ++j) {

数组填充环应为

int count = 0;     
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
    charArray[i][j] = char('1' +count );
count++;
}
}

尝试上述代码

您正在构建一个矩阵,在这里。因此,这是二维。输出意味着您的矩阵看起来像:

1 2 3
2 3 4

这是自然的,因为在填充它时,您为坐标i,j的每个元素写入值为1 i j。这意味着,如果我和j都等于1(第二行,第二列,因为索引在0开始(,则将值放置为1 1 1 = 3。

如果要获得矩阵:

1 2 3
4 5 6

您必须用

填充它
charArray[i][j] = char('1' + i*ncols + j );

这样,当您填充第一行时,i = 0,所以相同。但是在第二行上,i = 1,所以您得到1 3 0 = 4。然后1 3 1 = 5,等等。

编辑:人们在这里很快。当我写下答案时,已经有两个人发布了他们的答案:D

最新更新