关于打印单词长度直方图的代码

Mr_LZR 2013-06-16 11:36:30
最近在看《c程序设计语言》这个是里面的一道题目。用笔写写划划的找到了一点思路,最后写成这个样子。运行结果如图所示。
但我这里有几个问题想想问问大家。
No.1:怎么在单词长度超过两位数的时候,在横轴上能够不出现移位现象,或者说对于我这个程序功能来说怎么让两位数的数字竖着打印出来。并且能够控制好横轴的范围。比如我最大单词数是17,那么横轴最大就是17.我在单词数小于10的情况下可以做到,但是大于10就出现了我前面所说的移位现象。不能够对齐了,因为两位数占了两个字符宽度

No.2:我这个记录长度出现次数的数组一上来就定义成len[i];i=256;而实际中用不到这么多,很占内存,有什么办法可以实现数组的容量刚刚好够呢。关于C语言中动态数组 在这个程序中如何使用,希望大家能给点宝贵的意见

谢谢大家了!
#include	<stdio.h>

#define IN 1
#define OUT 0

main()
{

int count = 0;
int max1 = 0;
int max2 = 0;
int temp;
int c;
int i, j, k, m, n;
i = 256;
int len[i];

temp = OUT;
for (i=0; i<100; i++)
{
len[i] = 0;
}

while ((c=getchar()) != EOF)
{
if (c==' ' || c=='\t' || c=='\n')
{
if (max1 <= (count-1))
{
max1 = (count-1);
}

temp = OUT;
++len[count-1];
count = 0;
}
else if (temp == OUT)
{
temp = IN;
++count;
}
else
{
++count;
}

}

for (j=0; j<=max1; j++)
{
if (max2 <= len[j])
{
max2 = len[j];
}
}

for (; max2>=1; max2--)
{
printf("%3d|",max2);
for (k=0; k<=max1; k++)
{
if (len[k] >= max2)
{
printf(" *");
}
else
{
printf(" ");
}
}
printf("\n");

}
printf(" +");
if(max1 <10)
{
for (m=0; m<=(max1+1); m++)
{
printf(" _");
}
printf("---->>");
printf("\n");

printf(" 0");
for (n=1; n<=(max1+1); n++)
{
printf(" %d",n);
}
}
else if ((max1>=10) && (max1<=24))
{
printf(" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _---- >>\n");
printf(" 0");
printf(" 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2\n");
printf(" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4");
}
else
{
printf("the word is too long\a\n");
}
printf("\n");

}


这个是运行的结果图:
...全文
55 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧