一道C++题,请各位专家解答 !

编写程序输出图案。输入一个数值,输出2n-1行的指定字符,组成菱形、梯形、三角形图案。其中菱形每行中间对齐,梯形后n-1行的每行内容相同,三角形后n-1行依次递减。图形符号以及中间的分割符都可以设置。比如图形符号为、#、$等;分割符为1个空格、2个空格、制表符等。
比如输入:2,*,空格

img

你这个题目说的不清楚,如果用制表符分割的话,是不好中间对齐的。
如有帮助,请帮忙采纳一下,谢谢。
代码如下:

img

代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int i,j,n,t;
    char ss,ch,sp[10],buf[100];
    cin >> n;
    cin.get();  //过滤逗号
    ch = cin.get();//接收显示符号
    cin.get();//过滤逗号
    cin.getline(sp,9); //接收分割符
    //菱形
    cout << "选择菱形输出:"<<endl;
    int maxl = n+(n-1)*strlen(sp); //最大长度
    for (i=0;i<2*n-1;i++)
    {
        memset(buf,0,100);
        t = 0;
        if(i<n)
        {
            for(j=0;j<=i;j++)
            {
                sprintf(buf+t,"%c",ch);
                t+=1;
                if(j<i)
                {
                    sprintf(buf+t,"%s",sp);
                    t+=strlen(sp);
                }
            }
        }else
        {
            for (j=0;j<2*n-1-i;j++)
            {
                sprintf(buf+t,"%c",ch);
                t+=1;
                if(j<2*n-2-i )
                {
                    sprintf(buf+t,"%s",sp);
                    t+=strlen(sp);
                }
            }
        }

        for(j=0;j< (maxl-strlen(buf))/2;j++)
            cout <<" ";
        cout << buf;
        for(j = 0;j< maxl-(maxl-strlen(buf))/2;j++)
            cout <<" ";
        cout << endl;

    }


    cout << "选择三角形输出:"<<endl;
    for (i=0;i<2*n-1;i++)
    {
        if(i<n)
        {
            for(j=0;j<=i;j++)
            {
                if(j<i) cout << ch << sp;
                else cout << ch << endl;
            }
        }else
        {
            for(j=0;j<2*n-1-i;j++)
            {
                if(j<2*n-2-i)
                    cout << ch <<sp;
                else
                    cout << ch<<endl;
            }
        }
    }

    cout << "选择梯形输出:"<<endl;
    for(i=0;i<2*n-1;i++)
    {
        if(i<n)
        {
            for(j=0;j<=i;j++)
            {
                if(j<i) cout << ch <<sp;
                else cout << ch << endl;
            }
        }else
        {
            for(j=0;j<n;j++)
            {
                if(j<n-1) cout << ch << sp;
                else cout << ch << endl;
            }
        }
    }

    return 0;
}

在后台指定好图案。输入数字的时候 直接输出。