我正在尝试制作一个程序,该程序将向用户请求一个字符串并将其转换为字母金字塔(下面的示例)。
例如:如果用户输入字符串“12345”,则程序应显示:
1
121
12321
1234321
123454321
我的代码如下:(我尚未完成)#include <iostream>
#include <string>
using namespace std;
int main()
{
//gets input
cout << "Enter the string you would like to be processed" << endl;
string input;
cin >> input;
//bottom layer = bottommost layer on the pyramid | element amount = elements in any given layer. | layerNum is to determine which layer computer is on
int bottomLayer = input.size();
int elementAmount;
int layerNum;
//layerNum keeps track of the pyramid layer the loop is currently on. 1 is the top, bottom = the string's length
for (layerNum = 1; layerNum <= bottomLayer; layerNum++)
{
//signifies the amount of elements in a given layer. eg: for layer 2, the amount of elements would be 2*2-1=3
elementAmount = layerNum * 2 - 1;
//this loop prints the numbers up to where the order reverses
for (int strElement = 0; strElement < layerNum; strElement++)
{
cout << input.at(strElement);
}
//starts on the first reverse letter to be printed and prints the rest
for (int strElement = layerNum - 2; strElement < elementAmount; strElement--)
{
cout << input.at(strElement);
}
}
}
控制台窗口将按预期方式打开,我可以输入我的字符串。但是,这样做之后,它将返回第一个字母,并出现错误弹出窗口:Debug Error!
abort() has been called
除此之外,没有错误消息甚至警告。对于一个执行,在第28行有一个警告比较无符号整数,这是这样的:for (layerNum = 1; layerNum <= bottomLayer; layerNum++)
但是在我下次运行程序之后,它停止出现。关于如何使程序运行的任何想法? 最佳答案
第二个循环中存在一些逻辑错误。
strElement
可能小于0,因为在int strElement = layerNum - 2
中,layerNum
从1开始。strElement
元素在每个循环中减少1,因此在经过几回合后,它必须小于零。 strElement
> -1,因此一旦strElement
小于0,循环就会中断。注意:
> -1
可能不是正确的逻辑。但是strElement < elementAmount
一旦通过,循环将使strElement
始终小于0并无限循环运行。 //starts on the first reverse letter to be printed and prints the rest
for( int strElement = layerNum - 2; ; strElement > -1; strElement--)
{
cout << input.at(strElement);
}