1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| #include<stdio.h> #include<string.h> char str[20][210],table[20][20][100]; int str_len[20][20],max_col[20];
void putBar(int width){ printf("+"); for(int i=0;i<width;i++){ for(int j=0;j<max_col[i];j++){ printf("-"); } printf("+"); } puts(""); }
void putSpace(int len){ for(int i=0;i<len;i++) printf(" "); }
void getPlace(int width){ for(int i=0;i<width;i++){ int left=0,right=str_len[1][i]-1; str_len[1][i]=0; if(table[1][i][left]==':') str_len[1][i]=-1; if(table[1][i][right]==':') str_len[1][i]=1; if(table[1][i][left]==':'&&table[1][i][right]==':') str_len[1][i]=0; } }
void cut(int head,int tail,int num,int i,char table[20][20][100],int str_len[20][20]){ while(str[i][head++]==' '); while(str[i][--tail]==' '); head--; if(head>tail){ return ; } memcpy(table[i][num],str[i]+head,tail-head+1); str_len[i][num]=tail-head+1; }
int getStr(int i,size_t len){ int head=0,tail=0,num=0; while(1){ if(str[i][tail]=='|'){ cut(head,tail,num,i,table,str_len); num++; head=tail+1; } if(tail==len){ cut(head,tail+1,num,i,table,str_len); num++; break; } tail++; } return num; }
void putStr(int width,int length){ getPlace(width); for(int i=0;i<width;i++){ for(int j=0;j<length;j++){ if(j!=1){ if(str_len[j][i]>max_col[i]-2) max_col[i]=str_len[j][i]+2; } } } putBar(width); for(int i=0;i<length;i++){ if(i!=1){ printf("|"); for(int j=0;j<width;j++){ int t=str_len[1][j]; if(i==0) t=0; if(t==0){ int len=str_len[i][j],w=max_col[j],left=(w-len)>>1,right=w-len-left; putSpace(left),printf("%s",table[i][j]),putSpace(right),printf("|"); continue; } if(t==1){ int right=1,w=max_col[j],len=str_len[i][j],left=w-len-right; putSpace(left),printf("%s",table[i][j]),putSpace(right),printf("|"); continue; } if(t==-1){ int left=1,w=max_col[j],len=str_len[i][j],right=w-len-left; putSpace(left),printf("%s",table[i][j]),putSpace(right),printf("|"); continue; } } puts(""); } if(i==0) putBar(width); } putBar(width); }
int main() { int i=0,width; while(fgets(str[i],sizeof(str[i]),stdin)!=NULL){ size_t len=strlen(str[i]); str[i][len-1]=' '; width=getStr(i,len-1); i++; } putStr(width,i); return 0; }
|