题目描述
cpp
#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("+\n");
for(k=1; k<(height-1)/2;k++){
printf("|");
for(i=0;i<width-2;i++) printf(".");
printf("|\n");
}
printf("|");
printf("%*s%s%*s",__________________);
printf("|\n");
for(k=(height-1)/2+1; k<height-1; k++){
printf("|");
for(i=0;i<width-2;i++) printf(".");
printf("|\n");
}
printf("+");
for(i=0;i<width-2;i++) printf("-");
printf("+\n");
}
int main()
{
StringInGrid(10,4,"abcd123");
return 0;
}
题目分析
题目知识点:
*%s的含义:printf("%s",10,s):意思是输出字符串s,但至少占10个位置,不足的在字符串s左边补空格,这里等同于printf("%10s",s);
填空部分是填出缺少字母的那一行,进行尝试填补即可,将两边都取一半左右空格,左边少取,右边多取即可以符合题意
cpp
#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("%d:",(int)strlen(buf));
printf("+");
for(i=0;i<width-2;i++) printf("-");
printf("+\n");
for(k=1; k<(height-1)/2;k++){
printf("|");
for(i=0;i<width-2;i++) printf(".");
printf("|\n");
}
printf("|");
//printf("%d:\n",sz);
printf("%*s%s%*s",(width - 2 - strlen(buf)) / 2, "", buf, (width - 1 - strlen(buf)) / 2, ""); //填空
printf("|\n");
for(k=(height-1)/2+1; k<height-1; k++){
printf("|");
for(i=0;i<width-2;i++) printf(".");
printf("|\n");
}
printf("+");
for(i=0;i<width-2;i++) printf("-");
printf("+\n");
}
int main()
{
StringInGrid(10,4,"abcd123");
return 0;
}