透過二維陣列的方式進行輸出,程式碼如下:
#include<stdio.h>
#include<string.h>
char S[100][1000]={' '};//宣告表為全域性變數
int s1=0;
void chart(int n,int a[],int m);
int main()
{
int n;
int M1[40]={0},M2[40]={0},M3[40][100]={0};
int i,j,k,k1,k2,max=0,col,l;
char s[30][1000];
scanf("%d",&n);
getchar();//注意,必須得有這個來接收回車符
//獲得表格資料
for(i=0;i<n;i++)
gets(s[i]);
//求最大列數
l=strlen(s[i]);
for(j=0;j<l;j++)
if(s[i][j]==',')
M1[i]++;
}
if(M1[i]>max)
max=M1[i];
col=++max;
//求每列最大寬度 //1.先求每個單元的長度,賦給M3[i][j]中
k=0;
if(s[i][j]!=',')
M3[i][k]++;
k++;
} //for2
}//for1
//2.找每列最大的賦予M2[]
for(j=0;j<col;j++)
max=0;
if(M3[i][j]>max)
max=M3[i][j];
M2[j]=max;
//表格
chart(n,M2,col);
//輸入資料
k1=0;
k2=0;
S[2*i+1][k2+1]=s[i][j];
if(s[i][j+1]==',')
k1=k1+M2[k]+1;
k2=k1;
j++;
else
k2++;
//輸出表格
for(i=0;i<=2*n;i++)
for(j=0;j<s1;j++)
printf("%c",S[i][j]);
printf("\n");
return 0;
void chart(int n,int a[],int m)//行數 每列的最大長度陣列
int i,j,k;
int s;
s1=m+1;
for(i=0;i<m;i++)
s1+=a[i];
//輸出奇數行
if(i%2==0)
s=0;
if(j==s)
S[i][j]='+';
s+=a[k];
s++;
S[i][j]='-';
}//for
} //if
//輸出偶數行
S[i][j]='|';
} //for
透過二維陣列的方式進行輸出,程式碼如下:
#include<stdio.h>
#include<string.h>
char S[100][1000]={' '};//宣告表為全域性變數
int s1=0;
void chart(int n,int a[],int m);
int main()
{
int n;
int M1[40]={0},M2[40]={0},M3[40][100]={0};
int i,j,k,k1,k2,max=0,col,l;
char s[30][1000];
scanf("%d",&n);
getchar();//注意,必須得有這個來接收回車符
//獲得表格資料
for(i=0;i<n;i++)
gets(s[i]);
//求最大列數
for(i=0;i<n;i++)
{
l=strlen(s[i]);
for(j=0;j<l;j++)
{
if(s[i][j]==',')
M1[i]++;
}
if(M1[i]>max)
{
max=M1[i];
}
}
col=++max;
//求每列最大寬度 //1.先求每個單元的長度,賦給M3[i][j]中
for(i=0;i<n;i++)
{
l=strlen(s[i]);
k=0;
for(j=0;j<l;j++)
{
if(s[i][j]!=',')
{
M3[i][k]++;
}
if(s[i][j]==',')
k++;
} //for2
}//for1
//2.找每列最大的賦予M2[]
for(j=0;j<col;j++)
{
max=0;
for(i=0;i<n;i++)
{
if(M3[i][j]>max)
max=M3[i][j];
}
M2[j]=max;
}
//表格
chart(n,M2,col);
//輸入資料
for(i=0;i<n;i++)
{
k1=0;
k2=0;
k=0;
l=strlen(s[i]);
for(j=0;j<l;j++)
{
S[2*i+1][k2+1]=s[i][j];
if(s[i][j+1]==',')
{
k1=k1+M2[k]+1;
k2=k1;
k++;
j++;
}
else
k2++;
}
}
//輸出表格
for(i=0;i<=2*n;i++)
{
for(j=0;j<s1;j++)
printf("%c",S[i][j]);
printf("\n");
}
return 0;
}
void chart(int n,int a[],int m)//行數 每列的最大長度陣列
{
int i,j,k;
int s;
s1=m+1;
for(i=0;i<m;i++)
s1+=a[i];
for(i=0;i<=2*n;i++)
{
//輸出奇數行
if(i%2==0)
{
s=0;
k=0;
for(j=0;j<s1;j++)
{
if(j==s)
{
S[i][j]='+';
s+=a[k];
s++;
k++;
}
else
S[i][j]='-';
}//for
} //if
//輸出偶數行
else
{
s=0;
k=0;
for(j=0;j<s1;j++)
{
if(j==s)
{
S[i][j]='|';
s+=a[k];
s++;
k++;
}
}
}
} //for
}