gpt4 book ai didi

c++ - 字母金字塔 C++

转载 作者:行者123 更新时间:2023-12-01 14:37:18 26 4
gpt4 key购买 nike

我是一名 C++ 初学者。我发现输入前的空格可以通过公式总行数-当前行数来计算。但是,我无法弄清楚如何向后显示输入。我知道C++不支持负索引。有人可以帮我吗?我非常感谢你的帮助。谢谢!

预期结果:

如果用户输入“ABCDEFG”,那么您的程序应显示:

      A                                                                                                                
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA

我目前的结果:

      A
ABC
ABCDE
ABCDEFG
ABCDEFGAB
ABCDEFGABCD
ABCDEFGABCDEF

代码:

#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;
    }
}

最佳答案

嗯,在每一行,你在字符串中向前移动直到中点,然后向后移动:

A (+1) B (+1) C (+1) D (-1) C (-1) B (-1) A

实现这一目标的两种方法:

  1. 使用两个内循环而不是一个:从 0row,然后从 row - 1 向下到 0
  2. 不要在 i -total_row 处打印字符,而是更准确地计算需要在该位置打印哪个字符 - 例如使用距金字塔边缘的最小距离。

祝你好运。


PS - 正如 @ShadowMitia 在评论中提到的 - C++ 不支持负索引是不正确的。如果您为索引使用有符号类型(例如 int),它们可能为负数。但您实际上并不需要负指数来遵循我的建议。

关于c++ - 字母金字塔 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62679920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com