zoukankan      html  css  js  c++  java
  • 15年蓝桥杯第4题

    题意: StringInGrid函数会在一个指定大小的格子中打印指定的字符串。要求字符串在水平、垂直两个方向上都居中。如果字符串太长,就截断。如果不能恰好居中,可以稍稍偏左或者偏上一点。下面的程序实现这个逻辑,请填写划线部分缺少的代码。
    思路:被各种输出空搞晕了,不过看的题解上的原题,一拿该是有些出入的。
    开始以为的输出应该是 int len1 = (width - 2 - strlen(s)) / 2; int len2 = (width - 1 - len1 - strlen(s)); printf("%*s%s%*s", len1, " ", s, len2, " "); 应该是 int len1 = (width - 2 - strlen(s)) / 2; int len2 = (width - 1 - len1 - strlen(s)); printf("%*s%s%*s", len1, "", s, len2, ""); 错误在于当len1 == 0 时,第一个会多输出一个空格。%*s,前边的参数是字符串占的位数,后边的是要输出的字符串。当字符串长度不够该占的位数时,会用空格补齐。但是超过的时候就不会了。所以会出现上述错误。

    附right代码:

     1 /*
     2  StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
     3  要求字符串在水平、垂直两个方向上都居中。
     4  如果字符串太长,就截断。
     5  如果不能恰好居中,可以稍稍偏左或者偏上一点。
     6 
     7  下面的程序实现这个逻辑,请填写划线部分缺少的代码。
     8  */
     9 
    10 #include <stdio.h>
    11 #include <string.h>
    12 
    13 void StringInGrid(int width, int height, const char* s)
    14 {
    15     int i, k;
    16     char buf[1];
    17     strcpy(buf, s);  // 长度为1的字符数组,复制?
    18     if (strlen(s)>width - 2) buf[width - 2] = 0; // 截断字符串。为什么大于宽度减去2的时候就截断?
    19                                                  // 意思是,要想居中两边必须都至少留一个格子?
    20     printf("+");
    21     for (i = 0; i<width - 2; i++) printf("-");
    22     printf("+
    "); // 边框宽
    23 
    24     for (k = 1; k<(height - 1) / 2; k++)
    25     {
    26         printf("");
    27         for (i = 0; i<width - 2; i++) printf(" ");
    28         printf("
    ");
    29     }
    30 
    31       printf(""); //????
    32 
    33     // printf("%*s%s%*s", (width-strlen(s)-2)/2, "",s,(width-strlen(s)-1)/2,""); //输出字符串!格式就是参数
    34     int len1 = (width - 2 - strlen(s)) / 2;
    35     int len2 = (width - 1 - len1 - strlen(s));
    36     printf("%*s%s%*s", len1, "", s, len2, "");
    37 
    38     printf("
    ");
    39 
    40     for (k = (height - 1) / 2 + 1; k<height - 1; k++)
    41     {
    42         printf("");
    43         for (i = 0; i<width - 2; i++) printf(" ");
    44         printf("
    ");
    45     }
    46 
    47     printf("+");
    48     for (i = 0; i<width - 2; i++) printf("-");
    49     printf("+
    ");
    50 }
    51 
    52 int main()
    53 {
    54     StringInGrid(20, 6, "abcd1234");
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    前端页面存取数据
    jquery获取元素内容-text()和val()
    jquery选择器的一些处理
    Js判断一个字符串是否包含一个子串
    防止重复点击:
    Juery实现选项卡
    行间事件传this的问题:
    从数据库中导出数据到.csv文件
    表单限制只能填入正整数
    WAMP环境配置-Mysql安装
  • 原文地址:https://www.cnblogs.com/icode-girl/p/5232130.html
Copyright © 2011-2022 走看看