从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印。例如

5

*****

*****     3

*****   *****     2

*****   *****   *****

*****   *****   *****

alp     num     oth

思路解析:

在统计了字母、数字和其他字符的个数之后,分别记作alpN, numN, othN。取三者最大值hMax.分别取alpN, numN, othN与hMax的绝对值h1,h2,h3。

取三个标志位,flag1,flag2,flag3,初值设为0,表示有没有打印柱形上的数字。

0表示没有打印最上面的数字,1表示已经打印了数字。

在打印的过程中,第一行打印最大值的数字,同时flag设为1,其他的就输入空格,flag设为0。

从第二行开始,进入循环阶段,循环次数为hMax,如果flag为1,则打印*****,否则,h自减,一旦为0,设立flag为1,打印个数。直到循环结束。

最后再打印相应的标识。

程序结果如下:

 void print_Column(char*str)
{
//定义字母,数字,其他字符个数
int alpN = , numN = , othN = ;
//hMax为三者中最大的数,h1,2,3分别为距离hMax的值
int hMax = , h1 = , h2 = , h3 = ;
//指示标志,0表示没有打印最上面的数字,1表示已经打印了数字
int flag1 = , flag2 = , flag3 = ;
int i = ;
for (i = ; str[i] != '\0'; i++)
{
if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z'))
{
alpN++;
}
else if ('' <= str[i] && str[i] <= '')
{
numN++;
}
else
{
othN++;
}
}
printf("alpN=%d,numN=%d,othN=%d", alpN, numN, othN); //计算hMax
hMax = othN > (alpN > numN ? alpN : numN) ? othN : (alpN > numN ? alpN : numN);
//计算距离差值
h1 = abs(alpN - hMax);
h2 = abs(numN - hMax);
h3 = abs(othN - hMax);
printf("\nprint column.....\n"); //开始打印
//打印最上面的数字
if (h1 == )
{
printf(" %d ", alpN);
flag1 = ;
}
else
{
printf(" ");
}
printf("\t");
if (h2 == )
{
printf(" %d ", numN);
flag2 = ;
}
else
{
printf(" ");
}
printf("\t");
if (h3 == )
{
printf(" %d ", othN);
flag3 = ;
}
else
{
printf(" ");
}
printf("\n"); //开始循环,总共有 hMax 遍
for (i = ; i <= hMax; i++)
{
//针对alp的打印
if (flag1)
{
printf("*****");
}
else
{
h1--;
if (h1 == ) //表示要打印数字了
{
printf(" %d ", alpN);
flag1 = ;
}
else
{
printf(" ");
}
}
printf("\t"); //针对num的打印
if (flag2)
{
printf("*****");
}
else
{
h2--;
if (h2 == ) //表示要打印数字了
{
printf(" %d ", numN);
flag2 = ;
}
else
{
printf(" ");
}
}
printf("\t"); //针对oth的打印
if (flag3)
{
printf("*****");
}
else
{
h3--;
if (h3 == ) //表示要打印数字了
{
printf(" %d ", othN);
flag3 = ;
}
else
{
printf(" ");
}
}
//打印完一行就换行
printf("\n");
}
printf(" alp \t");
printf(" num \t");
printf(" oth \t");
printf("\n"); }
---------------------------------------------------------------------------------------------------------------------------
在主函数中的调用:
char str[];
printf("input a string:");
gets(str);
print_Column(str);

C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印的更多相关文章

  1. YTU 2429: C语言习题 学生成绩输入和输出

    2429: C语言习题 学生成绩输入和输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 1897  解决: 812 题目描述 编写一个函数print,打印一个学生的成绩数组,该数组中有 ...

  2. php实现 统计输入中各种字符的个数

    php实现 统计输入中各种字符的个数 一.总结 一句话总结:谋而后动,想清楚,会非常节约编写代码的时间. 1.对结果可能是0的变量,记得初始化? 4 $len=0; 5 $len=strlen($st ...

  3. YTU 2974: C语言习题5.26--文件操作3

    2974: C语言习题5.26--文件操作3 时间限制: 1 Sec  内存限制: 128 MB 提交: 213  解决: 92 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...

  4. YTU 2973: C语言习题5.25--文件操作2

    2973: C语言习题5.25--文件操作2 时间限制: 1 Sec  内存限制: 128 MB 提交: 242  解决: 105 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编 ...

  5. YTU 2972: C语言习题5.24--文件操作1

    2972: C语言习题5.24--文件操作1 时间限制: 1 Sec  内存限制: 128 MB 提交: 248  解决: 94 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...

  6. C语言习题 链表建立,插入,删除,输出

    Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

  7. 嵌入式C语言自我修养 13:C语言习题测试

    13.1 总结 前面12节的课程,主要针对 Linux 内核中 GNU C 扩展的一些常用 C 语言语法进行了分析.GNU C 的这些扩展语法,主要用来完善 C 语言标准和编译优化.而通过 C 标准的 ...

  8. c语言程序设计:用strcpy比较数组(银行卡密码程序设计),strcpy(复制数组内容)和getchar()(敲键盘字符,统计不想要的字符的个数)

    统计从键盘输入一行字符的个数: 1 //用了getchar() 语句 2 //这里的\n表示回车 #include <stdio.h> #include <stdlib.h> ...

  9. Problem X: C语言习题 学生成绩输入和输出

    Problem X: C语言习题 学生成绩输入和输出 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4722  Solved: 2284[Submit] ...

随机推荐

  1. C#, VB.NET如何加密PDF文档

    在日常工作中,人们通常通过加密PDF文档的方式来保护PDF文档.不管是公司还是个人,使用PDF加密术来设置一些权限是必不可少的.为了使PDF文档既可读又不能被未授权的用户所更改,一份PDF文档往往需要 ...

  2. Java中一个方法只被一个线程调用一次

    1.想在运行时抛出异常,终止方法的运行 private final Set<Long> THREADS = new HashSet<>(); public void someM ...

  3. Python标准模块--importlib

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python提供了importlib包作为标准库的一 ...

  4. 【Java基础】Java类的加载和对象创建流程的详细分析

    相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 package ...

  5. oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed

    归档日志满导致无法用户无法登陆 具体处理办法 --用户登陆 Microsoft Windows [Version 6.1.7601] Copyright (c) Microsoft Corporati ...

  6. .NET 二维码生成(ThoughtWorks.QRCode)【转发jiangys】

    .NET 二维码生成(ThoughtWorks.QRCode) 2015-06-21 22:19 by jiangys, 3790 阅读, 8 评论, 收藏, 编辑 引用ThoughtWorks.QR ...

  7. Java计算两个程序运行时间

    一.获取系统当前时间 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTim ...

  8. Servlet实现简单的登录页面

    package emp; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; imp ...

  9. JS上了贼船

    本文纯属个人观点,没有引经据典,没有小心求证,just吐槽. 互联网的火热.移动web,带动了前端的飞速发展,js好像搭上了顺风车,身价水涨船高,如日中天. web前端是啥?html + css + ...

  10. 设计一个神经网络记住Or运算(日志一)

    由于公式书写太过麻烦,所以上传设计的手稿过程,为如下: