您的位置:首页 > 其它

打印输入中单词长度的直方图(水平打印)

2014-11-19 22:01 288 查看

#include <stdio.h>
#define MAXWORDLEN 10//定义最长字符的长度
int main(void)
{
int c;//接受从键盘得到的字符
int inspace = 0;//用于表示当前是否在单词中
long lengtharr[MAXWORDLEN + 1];//记录当前单词长度wardlen的个数
int wordlen = 0;// 单词长度计数器
int thisval = 0;//当前长度单词的个数
long maxval = 0;//所有单词中,最多个数的单词的个数
int thisidx = 0;//当前单词长度
int done = 0;//循环执行条件
for (thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)
{
lengtharr[thisidx] = 0;//初始化
}
while (0 == done)
{
c =	getchar();
if (c == ' ' || c == '\t' || c == '\n' || c == EOF)//当当前字符为以上空白符时
{
if (inspace == 0)
{
inspace = 1;
if (wordlen <= MAXWORDLEN)//单词长度小于最大单词长度时
{
if (wordlen > 0)//数据不为空
{
thisval = ++lengtharr[wordlen - 1];//当前长度的单词的个数加一后赋给thisval
if (thisval > maxval)//如果当前长度单词的个数大于最大个数
{
maxval = thisval;//刷新最大个数
}//thisval > maxval
}//wordlen > 0
}//wordlen <= MAXWORDLEN
else
{
thisval = ++lengtharr[MAXWORDLEN];//单词长度大于最大单词长度时,将横坐标为大于十的个数加一
if (thisval > maxval)
{
maxval = thisval;//刷新最大个数
}//thisval > maxval
}
}
if (c == EOF)//终止
{
done = 1;
}
}
else
{
if (inspace == 1 )
{
wordlen = 0;
inspace = 0;
}
++wordlen;//个数计数器刷新为当前单词已读入的字母的个数
}
}//thisval > maxval
for(thisidx=10;thisidx>=0;thisidx--)//开始打印,纵坐标单词长度
{
for(thisval=1;thisval<=lengtharr[thisidx]+1;thisval++)//打印星星,因为还要打印坐标轴所以打印次数为星星数+1
{
if(thisidx==10)//因为第一行纵坐标不同于后几行所以单独用if区别开来
{
if(thisval==1)//对第一次打印,打印坐标轴
printf(" >%d|",MAXWORDLEN);
else//以后每次打印都打印星星
printf(" * ");
}
else//同上
{
if(thisval==1)
printf("%4d|",thisidx+1);
else
printf(" * ");
}
}
printf("\n");//每打印完一个长度的数量对应的星星后后就换行
}
printf("    +");//打印坐标原点
for(thisval=1;thisval<=maxval;thisval++)
printf("---");//对每个横坐标分配3个横线作为坐标轴防止出现是大于一位的个数空间不够
printf("\n");
printf("     ");
for(thisval=1;thisval<=maxval;thisval++)
printf("%2d ",thisval);//打印横坐标
printf("\n");//换行。。。
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐