在 C++ 中用给定的字母打印三角形
Printing triangle with given letter in C++
我想用给定的字母打印一个三角形。例如,如果我输入 D,程序应该 return:
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;
}
我们必须运行循环起始位置在'A'字符以上
直到我们到达您输入的字符
// 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;
}
使用嵌套循环结构。使用外循环 'walk' 沿着你的三角形,
lineLength = 1;
while(lineLength <= (c - 64)){
...stuff...
lineLength++;
cout << endl;
}
使用内部循环 'walk' 按字母顺序向下(您已经完成大部分操作):
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;
}
我看到其他人发布了类似的答案。在这两个答案之间,您应该能够找到自己的出路。我还没有编译 运行 这段代码,但我相信它应该可以工作或者非常接近。
不要将 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;
}
你肯定需要加强对循环的理解。这个工作得很好,它甚至对输入的内容进行了一些检查,并最终将小写字母转换为大写字母。
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;
}
我想用给定的字母打印一个三角形。例如,如果我输入 D,程序应该 return:
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;
}
我们必须运行循环起始位置在'A'字符以上 直到我们到达您输入的字符
// 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;
}
使用嵌套循环结构。使用外循环 'walk' 沿着你的三角形,
lineLength = 1;
while(lineLength <= (c - 64)){
...stuff...
lineLength++;
cout << endl;
}
使用内部循环 'walk' 按字母顺序向下(您已经完成大部分操作):
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;
}
我看到其他人发布了类似的答案。在这两个答案之间,您应该能够找到自己的出路。我还没有编译 运行 这段代码,但我相信它应该可以工作或者非常接近。
不要将 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;
}
你肯定需要加强对循环的理解。这个工作得很好,它甚至对输入的内容进行了一些检查,并最终将小写字母转换为大写字母。
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;
}