题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入格式
四行字符,由大写字母组成,每行不超过100个字符
输出格式
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
说明/提示
每行输出后面不允许出现多余的空格。
我用的map做的,感觉没啥问题,但是洛谷无法通过,有哪位大神能够指点一下
#include<iostream>
#include<map>
using namespace std;
#define maxn 1000
using namespace std;
map<char, int> cha;
int Max()
{
int max = cha.begin()->second;
for (map<char, int>::iterator itr = cha.begin(); itr != cha.end(); itr++)
{
if (itr->second > max)
max = itr->second;
}
return max;
}
int main()
{
char c[maxn];
memset(c, '0', sizeof(char));
int i = 0;
while (!cin.eof())
{
cin >> c[i++];
}
for (int i = 0; i < strlen(c); i++)
{
if (c[i] >= 'A' && c[i] <= 'Z')
++cha[c[i]];
}
int max = Max();
int hang = max;
int lie = cha.size();
char tem[1000][1000] = { 0 };
map<char, int>::iterator itr = cha.begin();
for (int i = 0; i < lie; i++)
{
int space = hang - itr->second;
itr++;
for (int j = 0; j < space; j++)
{
tem[j][i] = ' ';
}
for (int j = space; j < hang; j++)
tem[j][i] = '*';
}
for (int i = 0; i < hang; i++)
{
for (int j = 0; j < lie; j++)
{
cout << tem[i][j] << " ";
}
cout << endl;
}
for (auto m : cha)
cout << m.first << " ";
cout << endl;
system("pause");
return 0;
}