2015年蓝桥杯省赛A组c++第4题

/*
StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 
要求字符串在水平、垂直两个方向上都居中。 
如果字符串太长,就截断。 
如果不能恰好居中,可以稍稍偏左或者偏上一点。 
下面的程序实现这个逻辑,请填写划线部分缺少的代码。

对于题目中数据,应该输出:

+------------------+
|                  |
|     abcd1234     |
|                  |
|                  |
+------------------+
*/


#include <stdio.h>
#include <string.h>

void StringInGrid(int width, int height, const char* s)
{
    int i,k;
    char buf[1000];
    strcpy(buf, s);
    if(strlen(s)>width-2) buf[width-2]=0;

    printf("+");
    for(i=0;i<width-2;i++) printf("-");
    printf("+
");

    for(k=1; k<(height-1)/2;k++){
        printf("|");
        for(i=0;i<width-2;i++) printf(" ");
        printf("|
");
    }

    printf("|");

    printf("%*s%s%*s",/*(width-strlen(buf)-2)/2,"",buf,(width-strlen(buf)-2+1)/2,""*/);  //填空

    printf("|
");

    for(k=(height-1)/2+1; k<height-1; k++){
        printf("|");
        for(i=0;i<width-2;i++) printf(" ");
        printf("|
");
    } 

    printf("+");
    for(i=0;i<width-2;i++) printf("-");
    printf("+
");
}

int main()
{
    StringInGrid(20,7,"abcd1234");
    return 0;
}

tz@COI HZAU

2018/3/14

原文地址:https://www.cnblogs.com/acm-icpcer/p/8568315.html