我是 C++ 初学者。我发现输入前的空格可以通过公式总行 - 当前行号来计算。但是,我无法弄清楚如何向后显示输入。我知道 C++ 不支持负索引。有人可以帮我吗?我真的很感激你的帮助。谢谢!
预期结果:
如果用户输入“ABCDEFG”,则您的程序应显示:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
Run Code Online (Sandbox Code Playgroud)
我目前的结果:
A
ABC
ABCDE
ABCDEFG
ABCDEFGAB
ABCDEFGABCD
ABCDEFGABCDEF
Run Code Online (Sandbox Code Playgroud)
代码:
#include <iostream>
#include <string>
int main(){
std::string user_input;
std::cout << "Please enter something" << std::endl;
std::cin >> user_input;
size_t total_row = user_input.size();
for(size_t row {1}; row <= total_row; row++){
for(size_t blank {total_row-row}; blank >= 1; blank--)
std::cout << " ";
if ( total_row <= 1){
std::cout << user_input;
}
else {
for(size_t i {0}; i < ((row * 2) - 1); i++)
if (i >= total_row){
std::cout << user_input.at(i - total_row);
}
else{
std::cout << user_input.at(i);
}
}
std::cout << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,在每一行,你在字符串中前进直到中点,然后你向后退:
A (+1) B (+1) C (+1) D (-1) C (-1) B (-1) A
Run Code Online (Sandbox Code Playgroud)
实现这一点的两种方法:
0to row,然后 down from row - 1to 0。i - total_row更准确地计算需要在该位置打印哪个字符 - 例如,使用距金字塔边缘的最小距离。祝你好运。
PS - 正如@ShadowMitia 在评论中提到的 - C++ 不支持负索引是不正确的。如果您int对索引使用有符号类型(例如),则它们可能为负数。但是你真的不需要负指数来遵循我的建议。