gpt4 book ai didi

c++ - 用ASCII算法简单画图

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:58 26 4
gpt4 key购买 nike

我试图用 ASCII 绘制一个简单的形状,当我尝试绘制一个简单的三角形时,我的最后一行总是被省略。你能帮我个忙吗?也许我遗漏了什么?

static void set_char_at(char* mat, int cols, int x, int y, char c)
{
mat[x*cols+y] = c;
}

int test3()
{
int n;
cin >> n;
char* mat = new char[(n*n)]; // newlines
for(int i=0; i < n*n; i++) {
mat[i] = ' ';
}
for(int i=0; i <= n; i++) {
for(int j=0; j < i; j++) {
set_char_at(mat, n, i, -j, '^');
}
set_char_at(mat, n, i, 0, '\n');
}
cout << mat;
}

编辑:输入为 5,所需输出为:

     ^
^^
^^^
^^^^
^^^^^

在屏幕的右端,如图所示。我遗漏了最后一行“^”。

最佳答案

char* mat = new char[(n*n)]; // newlines
for(int i=0; i < n*n; i++)
mat[i] = ' ';

假设 n 为 1。数组 mat 的大小为 1*1。这可以容纳 1 个字符。在 C++ 中,字符串(不是 std::string)是由空字节终止的字符数组,需要 N+1 个字节。

char* mat = new char[(n*n) + 1];
for(int i=0; i < n*n; i++)
mat[i] = ' ';
mat[n*n] = 0;

回到你的代码,如果n是2:

for(int i=0; i <= n; i++) {
for(int j=0; j < i; j++) {
set_char_at(mat, n, i, -j, '^');
}

这将调用:

        set_char_at(mat, n, 1, -0, '^');  => mat[1*2-0] => 2
set_char_at(mat, n, 2, -0, '^'); => mat[2*2-0] => 4
set_char_at(mat, n, 2, -1, '^'); => mat[2*2-1] => 3

注意右边的索引,循环中还有一行:

for(int i=0; i <= n; i++) {
for(int j=0; j < i; j++) {
set_char_at(mat, n, i, -j, '^');
}
set_char_at(mat, n, i, 0, '\n');

这转化为:

        set_char_at(mat, n, 1, -0, '^');  => mat[1*2-0] => 2
set_char_at(mat, n, 1, 0, '\n'); => mat[1*2+0] => 2
set_char_at(mat, n, 2, -0, '^'); => mat[2*2-0] => 4
set_char_at(mat, n, 2, -1, '^'); => mat[2*2-1] => 3
set_char_at(mat, n, 2, 0, '\n'); => mat[2*2+0] => 4

您需要为回车留出空间:

#include <iostream>

void testf(size_t n)
{
const size_t matSize = (n+1) * n + 1;
char* mat = new char[matSize] {};
for (size_t i = 0; i < matSize - 1; ++i)
mat[i] = ' ';
mat[matSize - 1] = 0;

for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j <= i; ++j)
mat[i*(n+1)+(n-j-1)] = '^';
mat[i*(n+1) + n] = '\n';
}

std::cout << "--- start " << n << "\n";
std::cout << mat;
std::cout << "--- end\n";
}

int main()
{
testf(4);
}

现场演示:http://ideone.com/mhY7iS

关于c++ - 用ASCII算法简单画图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com