准备一个二维\(char\)数组\(o\),用来预填写好要输出的字符,最后一并输出
输出前判断一下每行最后一个非空字符在哪里
具体看代码
Code
#include <cstdio>
#include <cstring>
char ch,o[500][60];
int i,j,r,cnt[30]/*标字母出现次数*/,max;
int main()
{
for (ch=getchar(); ch!=-1; ch=getchar()) // ch==-1代表读到了输入的末尾
if (ch >= 'A' && ch <= 'Z') // 如果读到的是一个大写字母
{
i = ch-'A';
++cnt[i]; // 统计每个字母出现了多少次
if (cnt[i] > max) max = cnt[i]; // 更新表格的最大高度
}
memset(o, ' ', sizeof(o)); // 把数组o中的元素全置为空格
for (i=0; i<26; ++i) //预状填输出数组
{
o[0][i*2] = 'A'+i;
for (j=1; j<=cnt[i]; ++j) o[j][i*2] = '*';
}
for (i=max; i>=0; --i) //输出数组
{
for (r=50; o[i][r]==' '; --r); //求第i行最后一个非空字符在哪里
for (j=0; j<=r; ++j) printf("%c", o[i][j]);
printf("\n");
}
}