第三十六课 用循环处理文字 【项目1-5】
2015-12-20 23:06
267 查看
第三十六课 用循环处理文字
项目一【M$pszi$y是嘛意思?】
小明让同学传纸条给小丽,纸条上写着M$pszi$y。小丽接到会心一笑,大家却不知所云。他们俩的花招瞒不过老师,给你一个程序,输入M$pszi$y,输出的,就是小明的真实意思!
老师真坏!下面,该你运行程序了,明白这样的处理方式后,扩展完成后面的两项工作:
[cpp] view
plaincopyprint?
#include <stdio.h>
int main()
{
char ch;
while((ch=getchar())!='\n')
{
putchar(ch-4);
}
return 0;
}
因为他们俩人的“加密”手段泄露,决定纸条由人传,加密数字(1-9)用两人约好的手势传。所以在解密前,需要将加密数字提前输入。例,输入4(回车)M$pszi$y(回车),输出……
代码:
#include<stdio.h> int main() { char ch; int n; printf("请输入口令:\n"); scanf("%d",&n); if(n==4) { printf("口令正确,请继续:\n"); getchar(); while ((ch=getchar())!='\n') putchar(ch-n); } else printf("口令错误!请重试。\n"); printf("\n"); return 0; }
运行结果:
======================================================================================================================
项目二【转着圈加密】
为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。加密办法,如图所示,每一个字母的密文是其后第4个字母,若超出了字母的范围,将A看作为Z的下一个字母,将a看作是z的下一个字线,依次顺延。
如″Wonderful!″转换为″Asrhivjyp!″。
输入一行字符,要求输出其相应的密码。
代码:
(1)全字符加密型:
利用switch语句#include<stdio.h> int main() { char ch; printf("请输入电文:\n"); while ((ch=getchar())!='\n') { switch(ch) { case 87: case 88: case 89: case 90: putchar(ch-22); break; case 119: case 120: case 121: case 122: putchar(ch-22); break; default: putchar(ch+4); } } printf("\n"); return 0; }
运行结果:
(2)只加密字母型:
利用条件语句#include<stdio.h> int main() { char ch; printf("请输入电文:\n"); while ((ch=getchar())!='\n') { if ((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) { if ((ch>='W'&&ch<='Z')||(ch>='w'&&ch<='z')) ch-=22; else ch+=4; } putchar(ch); } printf("\n"); return 0; }
运行结果:
======================================================================================================================
项目三 【消除多余的空格】
从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。例如,输入:I am a teacher.,输出I am a teacher.
代码:
#include<stdio.h> int main() { char c; int i=1; while ((c=getchar())!='\n') { if(c!=' ') { putchar(c); i=1; } else { if (i<2) { putchar(c); i++; } } } printf("\n"); return 0; }
运行结果:
======================================================================================================================
项目四 【血型统计】
黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的样本数目。输入:血型序列(A/B/O/C,C代表AB型血,输入以X结束)
输出:各种血型的数量
输入样例:ABCAOCOAOOBX
输出样例:A:3 B:2 O:4 AB:2
代码:
#include<stdio.h> int main() { int a=0,b=0,ab=0,o=0; char c; while((c=getchar())!='X') { if(c=='A') a++; else if(c=='B') b++; else if(c=='C') ab++; else if(c=='O') o++; } printf("A血型为:%d\nB血型为:%d\nAB血型为:%d\nO血型为:%d\n",a,b,ab,o); return 0; }
运行结果:
======================================================================================================================
项目五 【有多少符号】
输入一行文字,以回车结束,统计并输出其中数字、空格、字母出现的次数,以及输入的字符总数。代码:
#include<stdio.h> int main() { char c; int n=0,w=0,s=0,sum=0; while((c=getchar())!='\n') { if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')) w++; else if(c>='0'&&c<='9') n++; else if(c==' ') s++; sum++; } printf("数字个数:%d\n字母个数:%d\n空格数:%d\n共%d个字符\n",n,w,s,sum); return 0; }
运行结果:
======================================================================================================================
知识点与总结:
循环中加入条件语句或者switch语句可以实现不同的运算,统计字符个数、筛选某种特殊字符等,应该灵活运用这一点。
有时候运用ask||码值求解也是一种好的办法。
138
相关文章推荐
- ACM 素数距离
- linux中结构体成员变量加“点”问题
- C#委托与C语言函数指针及函数指针数组
- 未能从程序集“System.ServiceModel, Version=3.0.0.0......解决方法
- Confluence 5.4实现与JIRA前所未有的集成
- 记一次驴唇不对马嘴的DIY之旅(二)
- Mapreduce部署与第三方依赖包管理
- 39节课后再解
- python string 常用方法
- 递归查看某个文件夹的所有子文件
- 解决ssh终端CentOS后中文显示乱码
- 程序是如何执行的(三)函数调用
- 链接:http://pan.baidu.com/s/1geeQWrp 密码:lhqq
- 国内较快的maven镜像
- 结对编程神器:tmux
- 格子类型游戏的总结
- 【摘】linux之shutdown、halt和reboot命令详解
- 部署和调优 2.5 tomcat配置和优化
- Count 1 in Binary
- 使用ProtocolBuffer或者是Wire框架进行数据传输