根据用户输入创建C ++文本金字塔

时间:2019-03-23 20:22:43

标签: c++

我正在为Udemy上的C ++课程编写本文,这是第10节的作业。因此,我从课程和之前的代码中来回学习了如何使用字符串方法等,而我似乎无法理解为什么它不起作用。逻辑似乎指向我。

我的目标是创建一个可以接受用户输入并以此创建金字塔的程序,

      A     
     ABA
    ABCBA     
   ABCDCBA   
  ABCDEDCBA  
 ABCDEFEDCBA
ABCDEFGFEDCBA

pyra是一个空字符串,我每次只在user_input字符串中添加一个字母以构成金字塔。然后,它打印出pyra,并跳过pyra的第一个字母,在pyra中向后循环,以创建镜像效果。每次循环经过时,都会从空格中删除一个空格(该空格在实际字母的前后打印。

#include <iostream>
#include <string>

using namespace std;

int main() {

  string user_input {}, pyra {""}, space (user_input.length() - 1, ' ');

  cout << "Please enter a sequence of characters... ";
  cin >> user_input;

  for (size_t i{0}; i < user_input.length(); ++i) {

    pyra = user_input.substr(0, i + 1);

    cout << space << pyra;

    if (pyra.length() == 1) {
      cout << space;
    } else {
      for (auto j {pyra.length()}; j > 0; --j) {
        cout << pyra.at(j);
      }
    }
    space.erase(0, 1);
    cout << endl;
  }
  return 0;
}

2 个答案:

答案 0 :(得分:0)

您越界,即UB。因此,请更正以下行:

cout << pyra.at(j-1);              // don't go out of bounds when j is length

另一个问题在这里,因为在初始化空间时,user_input一直为空,因此您尝试创建无效长度的字符串:

string user_input {}, pyra {""}, space (user_input.length() - 1, ' ');

因此在输入发生后移动错误的声明:

string space (user_input.length() - 1, ' ');   // create it here !!

最后,如果长度为1,您确定需要特殊情况吗?

Online demo

注意:您假设输入字符串的长度至少为1。因此,请更好地控制它,因为如果用户只是键入enter,则space的长度仍然会有问题。 / p>

答案 1 :(得分:-1)

Row_Number() over ( partition by <add a list of columns which you wanted to be unique in each row> order by <list of columns which you wanted to order by> ) as row