• 第六届蓝桥杯试题c/c++B组4



    格子中输出

    StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
    要求字符串在水平、垂直两个方向上都居中。
    如果字符串太长,就截断。
    如果不能恰好居中,可以稍稍偏左或者偏上一点。

    下面的程序实现这个逻辑,请填写划线部分缺少的代码。

    #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",_____________________________________________); //填空

    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,6,"abcd1234");
    return 0;
    }

    对于题目中数据,应该输出:
    +------------------+
    | |
    | 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-2-strlen(buf))/2)," ",buf,((width-2-strlen(buf))/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,6,"abcd1234");
        return 0;
    }
  • 相关阅读:
    指针数组和数组指针
    initializer_list
    main:处理命令行选项
    Synchronized 和Lock区别
    sleep和wait的区别
    什么时候会发生类初始化
    类的加载与ClassLoader的理解
    获取Class类的实例
    元注解
    IO流思维导图
  • 原文地址:https://www.cnblogs.com/a863886199/p/6568193.html
Copyright © 2020-2023  润新知