我正在为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;
}
答案 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,您确定需要特殊情况吗?
注意:您假设输入字符串的长度至少为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