ACM_输出格式

输出格式

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

某水比参加了XX杯,但是他太水,所以三等都木有,所以他决定出一道水题水一水。

Input:

输入多组测试数据,每一组一个整数width(3-50),一个整数height(3-50),一个字符串(长度不超过width-2). 

Output:

对于每个测试实例,要求把字符串按要求输出(字符串处于由width为长,height为宽的矩形的中部),
(。。。倘若不能完全对称,请以左边比右边少,上边比下边少为原则如样例),具体格式请参照sample output。

Sample Input:

20 6 abcd1234 
20 6 abc

Sample Output:

+------------------+
|                  |
|     abcd1234     |
|                  |
|                  |
+------------------+
+------------------+
|                  |
|       abc        |
|                  |
|                  |
+------------------+
 解题思路:水题!!!刚开始用了二维数组存放,代码比较简洁,但老是WA,原来是memset函数没有弄清楚,用0直接就填充字符二维数组,显然是不对的。。。本题所要填充的是字符空格' ',对应的ASCII码为32,因为memset函数将s所指向的某一块内存中的后n个字节的内容全部设置为ch指定的ASCII值,也可以直接用单个字符进行填充,明白这个后,以后做题思路就清晰了。
二维数组AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char draw[55][55],s[50];
 4 int main(){
 5     int w,h,len,k,w0,h0;
 6     while(cin>>w>>h>>s){
 7         memset(draw,' ',sizeof(draw));
 8         draw[0][0]=draw[0][w-1]=draw[h-1][0]=draw[h-1][w-1]='+';
 9         for(int j=1;j<w-1;++j)
10             draw[0][j]=draw[h-1][j]='-';
11         for(int i=1;i<h-1;++i)
12             draw[i][0]=draw[i][w-1]='|';
13         len=strlen(s);k=0;h0=(h-1)/2;w0=(w-len)/2;
14         for(int j=w0;k<len;++j)
15             draw[h0][j]=s[k++];
16         for(int i=0;i<h;++i){
17             for(int j=0;j<w;++j)
18                 printf("%c",draw[i][j]);
19             printf("
");
20         }
21     }
22     return 0;
23 }

AC代码: 

 1 #include<bits/stdc++.h>
 2 #define FOR(i,a,b) for (int i=a;i<=b;++i)
 3 #define PTF printf
 4 using namespace std;
 5 int main(){
 6     int w,h,len,objh,objw;char s[50];
 7     while(cin>>w>>h>>s){
 8         len=strlen(s);
 9         PTF("+");
10         FOR(i,1,w-2)PTF("-");
11         PTF("+
");
12         h-=2;h--;/*h减1是去掉包含字符串的那一行,接下来再平分行数*/objh=h/2;
13         FOR(i,1,objh){
14             PTF("|");
15             FOR(j,1,w-2)PTF(" ");
16             PTF("|
");
17         }
18         objw=(w-2-len)/2;
19         PTF("|");
20         FOR(i,1,objw)PTF(" ");
21         PTF("%s",s);//直接输出字符串
22         FOR(i,1,w-2-len-objw)PTF(" ");
23         PTF("|
");
24         FOR(i,1,h-objh){
25             PTF("|");
26             FOR(j,1,w-2)PTF(" ");
27             PTF("|
");
28         }
29         PTF("+");
30         FOR(i,1,w-2)PTF("-");
31         PTF("+
");
32     }
33     return 0;
34 }
原文地址:https://www.cnblogs.com/acgoto/p/8992371.html