码迷,mamicode.com
首页 > 其他好文 > 详细

15年蓝桥杯第4题

时间:2016-03-01 20:30:49      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

题意: 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("+\n"); // 边框宽
23 
24     for (k = 1; k<(height - 1) / 2; k++)
25     {
26         printf("");
27         for (i = 0; i<width - 2; i++) printf(" ");
28         printf("\n");
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("\n");
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("\n");
45     }
46 
47     printf("+");
48     for (i = 0; i<width - 2; i++) printf("-");
49     printf("+\n");
50 }
51 
52 int main()
53 {
54     StringInGrid(20, 6, "abcd1234");
55     return 0;
56 }
View Code

 

15年蓝桥杯第4题

标签:

原文地址:http://www.cnblogs.com/icode-girl/p/5232130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!