题目描述
#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);
填空部分是填出缺少字母的那一行,进行尝试填补即可,将两边都取一半左右空格,左边少取,右边多取即可以符合题意
#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;
}