c++ - 如何使用 C++ 中的字符绘制沙漏?
问题描述
因此,最终的目标是创建根据三角形大小绘制沙漏的代码。例如,如果我有一个初始化为 Hourglass h1(6,'^','-') 的对象,则该对象的大小为 6,边框字符为 '^'。而填充字符是'-'。最后,结果将如下所示:
到目前为止,这就是我绘制函数的全部内容:
//Purpose is to draw the hourglass
void Hourglass::Draw()
{
char space=32; //Stores spaces
if (size==1) //If the size is 1, then display the border
cout << border << "\n";
else { //just draw size-1 border characters
for (int i=0; i<size-1;i++)
cout << border << space;
}
cout <<"\n";
}
这就是我卡住的地方。我不太确定当沙漏的大小增加到超过 1 时如何绘制沙漏。我确实认为我需要在 for 循环中编写一个 for 循环,但我再一次不确定如何去做吧。
如果有人能够,请引导我朝着正确的方向前进。我不是在寻找给我的答案。我宁愿被告知如何才能得到正确的答案。
谢谢你。
解决方案
乔治的回答是一个好的开始。但是很容易简化它:
这是我的解决方案:
#include <iostream>
using namespace std;
void hourglass(size_t width, char outer, char inner)
{
if (width < 1)
{
return;
}
size_t rows = width * 2 - 1;
for (size_t row = 0; row < rows; row++)
{
size_t r = row;
if (row > rows / 2)
{
// if we're drawing a row on the bottom half
// normalize it to be the mirror of a row on the top half
r = rows - row - 1;
}
// draw r leading spaces
for (size_t i = 0; i < r; i++)
{
cout << " ";
}
// draw width-r charaters (including spaces in between)
for (size_t i = 0; i < width-r; i++)
{
size_t last = width - r - 1;
char c = inner;
// if it's the top row, bottom row, or first char, or last char of the row
// then draw an outer character
if ((i == 0) || (i == last) || (r == 0))
{
c = outer;
}
cout << c;
if (i != last)
{
cout << " ";
}
}
cout << endl;
}
}
int main()
{
hourglass(5, '^', '*');
cout << endl << endl;
hourglass(6, '^', '*');
}
运行时:
^ ^ ^ ^ ^
^ * * ^
^ * ^
^ ^
^
^ ^
^ * ^
^ * * ^
^ ^ ^ ^ ^
^ ^ ^ ^ ^ ^
^ * * * ^
^ * * ^
^ * ^
^ ^
^
^ ^
^ * ^
^ * * ^
^ * * * ^
^ ^ ^ ^ ^ ^
至于将其转换为 C++ 类,那是你要解决的练习。
推荐阅读
- angular - 如何使用 Angular Application 构建渐进式 Web 应用程序?
- spring-boot - Springboot Heroku 应用程序在部署时崩溃
- entity-framework - 使用 Entity Framework 和集成测试搭建 .NETCore WebAPI 项目的工具
- forms - 在 MsAccess 表单中按“显示全部”按钮后删除关键字
- php - PHP:正则表达式,如何验证 android 和 ios 深层链接 URI
- java - 如何有效地将属性更改为 Android Studio 中的多个视图/按钮?
- javascript - jQuery FormBuilder 仅验证必填字段
- python - 如何在robot.api中调用监听类?
- python - 不允许我在函数和 int 之间使用 >
- java - How do you remove an element from an array based on element's field value? (Spring-Boot, Reactive MongoDB)