在c ++中用for循环生成一组围绕文本的星星

时间:2015-10-08 20:42:10

标签: c++ for-loop

我正在尝试用c ++创建一个程序,它围绕一些给定的代码行,并带有一个星形框,其中句子“整齐地”。我这样做是为了一个小文本,它只包含相同的句子而且有效。但是当试图让这个程序适用于只有一个以上句子的文本时,它会失败,因为句子的大小不一样。我该如何解决这个问题?这是我的代码

#include <iostream>
using namespace std;

int main( int argc, char* argv[] )
{
int r, c;

for( r = 0; r < 5; ++r )
{
    for( c = 0; c < 28; ++c )
    {
        if( r == 0 || r == 4 )
        {
            cout << "*";
        }
        else
        {
            if( c == 0 || c == 27 )
                cout << "*";
            if(r >= 1 && c == 1){
                cout << " this is a test sentence";
            }
                if(c > 1 && c < 4){
                    cout << " ";
                }
        }
    }
    cout << "\n";
}

return 0;
}

1 个答案:

答案 0 :(得分:0)

您可能会更改代码,因此它使用变量,而不是文字常量。执行此操作后,您可以根据计算框宽度的方式选择两个选项:

  • 已修复 - 使用cout << std::setw(fixed_width) << std::left << sentences[i];(在循环中)

  • 变量 - 使用循环或std::max_element来确定最长的句子并执行与固定宽度相同的操作

您将使用std::vector<std::string> sentences

我还要补充一下你现在的整洁程度:

#include <iostream>
#include <string>
#include <iomanip>

using std::cout;
using std::endl;

int main()
{
    const int width = 20;
    const char c = '*';

    std::string horizontal_line(width, c);
    std::string horizontal_line_empty(c + std::string(width - 2, c) + c);

    cout << horizontal_line << endl << horizontal_line_empty << endl;
    cout << c << std::setw(width - 2) << std::left << std::string("hello") << c << endl;
    cout << horizontal_line_empty << endl << horizontal_line << endl;
}

我希望你能从中获得一些东西。