我想打印一个给定字母的三角形。例如,如果我输入D,程序应返回:
A
AB
ABC
ABCD
到目前为止,我已经设法打印所有字母,直到我的例子中的给定字母,但是你看到这个方法不太有效,因为我需要对所有26个案例执行此操作,因为英文字母是26个字符。有没有办法优化我的代码?
#include <iostream>
using namespace std;
int main() {
char i;
cout << "Enter char ";
cin >> i;
int c = static_cast<int>(i);
if (65 < c) {
cout << "A";
cout << endl;
}
if (66 < c) {
cout << "AB";
cout << endl;
}
if (67 < c) {
cout << "ABC";
cout << endl;
}
for (int i = 64; i < c; i++) {
cout << static_cast<char>(i + 1);
}
return 0;
}
答案 0 :(得分:3)
使用嵌套循环结构。使用外环来“走”三角形,
lineLength = 1;
while(lineLength <= (c - 64)){
...stuff...
lineLength++;
cout << endl;
}
使用内循环来“走”字母表(你已经完成了大部分工作):
for (int i = 0; i < lineLength; i++) {
cout << static_cast<char>(i + 65);
}
把它放在一起:
lineLength = 1;
while(lineLength <= (c - 64)){
for (int i = 0; i < lineLength; i++) {
cout << static_cast<char>(i + 65);
}
lineLength++;
cout << endl;
}
我看到其他人发布了类似的答案。在这两个答案之间,你应该能够找到自己的方式。我没有编译和运行此代码,但我相信它应该工作或非常接近。
答案 1 :(得分:3)
不要将ascii整数值编码为代码。明确使用字符或字符串文字(例如'A'
代替65
)
从辅助函数开始,只打印一行
// prints all the characters of the alphabetic sequence from "A" to the final char designated by <c>
void printTriangleLine(char c)
{
if ((c < 'A') || (c > 'Z'))
{
return;
}
for (char x = 'A'; x <= c; x++)
{
cout << x;
}
cout << endl;
}
然后将它们放在你的主要部分:
int main()
{
char i;
cout << "Enter char ";
cin >> i;
if ((i < 'A') || (i > 'Z'))
{
return 0;
}
for (char x = 'A'; x <= i; x++)
{
printTriangleLine(x);
}
return 0;
}
答案 2 :(得分:3)
你肯定需要研究你对循环的理解。这个工作得很好,它甚至对输入的内容进行了一些检查,最终将小写字母转换为上层字母。
char first = 'A';
char last = 0;
cout << "Enter a char: ";
cin >> last;
fflush(stdin);
cout << "\n\n";
if ((last > 96) && (last < 123)) //97 to 122 are lower case letters
{
last -= 32; //32 is the delta between each lower case letter and its upper case "twin"
}
if ((last > 64) && (last < 91))
{
for (char i = 65; i <= last; i++)
{
for (char j = 65; j <= i; j++)
{
cout << j;
}
cout << "\n";
}
}
else
{
cout << "\nWrong character!!\n\n";
return 0;
}
答案 3 :(得分:0)
我们必须从位置运行循环在'A'字符之上 直到我们到达你进入的charanter
// procead until reached input letter
while (chNew != c)
{
// go to next letter
chNew++;
// start with 'A' until current char + 1
for (int j = 'A'; j < chNew + 1; j++)
cout << (char)j;
// go to next line
cout << endl;
}
在每个循环中,我们将字符值增加1以转到下一个值
// go to next letter
chNew++;
内部循环只是将A
中的字符打印到相对于当前chNew + 1
的下一个值,这是因为我们还希望将当前字符包含在我们的打印行中。
这是您的工作代码。
#include <iostream>
using namespace std;
int main()
{
char i;
cout << "Enter char ";
cin >> i;
int c = static_cast<int>(i);
// start with 'A' - 1 character
char chNew = 'A' - 1;
// procead until reached input letter
while (chNew != c)
{
// go to next letter
chNew++;
// start with 'A' until current char + 1
for (int j = 'A'; j < chNew + 1; j++)
cout << (char)j;
// go to next line
cout << endl;
}
// we have done
return 0;
}