如何在不使用`std :: setw`,`std :: left`和`std :: right`的情况下用C ++打印这个模式

时间:2016-01-06 14:30:22

标签: c++

我必须编写一个C ++程序来打印这种模式:

*                  *
* *              * *
* * *          * * *
* * * *      * * * *
* * * * *  * * * * *

这是我的解决方案:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    for(int i = 1; i <= 5; ++i) {
        string temp = "";
        for(int j = 1; j <= i; ++j) {
            if(j == i)
                temp += "*";
            else
                temp += "* ";
        }
        cout << left << setw(10)<< temp;
        cout << right << setw(10) << temp << endl;
    }   
    return 0;
}  

是否有使用简单空间的解决方案?不要只在cout语句中写出五个字符串。

1 个答案:

答案 0 :(得分:0)

如果你使用两个字符串变量,例如,你可以轻松地做到这一点。 leftright,而不是您的单个temp变量:

for(int i = 0; i < 5; i++)
{
    string left, right;
    for(int j = 0; j < 5; j++)
    {
        if(j - i < 1)
        {
            // Add a star and a space to each side.
            left += "* ";
            right = " *" + right;
        }
        else
        {
            // Add four spaces into the middle between the stars.
            left += "    ";
        }
    }
    cout << left + right << endl;
}