您的位置:首页 > 编程语言 > C语言/C++

C语言第十三篇:简单文字处理

2016-04-12 11:28 381 查看


一、简单示例


代码

/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作    者:刘兵马俑
*完成日期:2016/04/12
*版 本 号:v1.0
*问题描述:键盘缓冲区、处理一连串字符、统计(特殊)字符数量、for和while
*程序输出:
*/
#include<stdio.h>
#include<math.h>
int main()
{
char c;
int count=0,i=0,n=0;//用于计数的变量应该指定初值
//用while语句实现
while((c=getchar())!='\n')
{
putchar(c);
putchar('\n');
count++;
}
printf("\n%d\n",count);
//用for语句实现
for(i=0;(c=getchar())!='\n';++i)
{
putchar(c);
putchar('\n');
}
printf("\n%d\n",i);
//统计数字字符数量
while((c=getchar())!='\n')
{
if(c>='0'&&c<='9')  ++n;
}
printf("\n%d\n",n);
return 0;
}


运行结果




二、M$pszi$y是嘛意思?


题目与要求:

小明让同学传纸条给小丽,纸条上写着M$pszi$y。小丽接到会心一笑,大家却不知所云。他们俩的花招瞒不过老师,给你一个程序,输入M$pszi$y,输出的,就是小明的真实意思!老师真坏!下面,该你运行程序了,明白这样的处理方式后,扩展完成后面的两项工作:因为他们俩人的“加密”手段泄露,决定纸条由人传,加密数字(1-9)用两人约好的手势传。所以在解密前,需要将加密数字提前输入。例,输入4(回车)M$pszi$y(回车),输出……

代码

/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作    者:刘兵马俑
*完成日期:2016/04/12
*版 本 号:v1.0
*问题描述:键盘缓冲区、处理一连串字符、统计(特殊)字符数量、for和while
*程序输出:
*/
#include<stdio.h>
#include<math.h>

int main()
{
int N;
char ch;
printf("请输入密钥和密文:\n");
scanf("%d",&N);
while((ch=getchar())!='\n')
{
putchar(ch-N);
}
return 0;
}



运行结果



--------------------------------------------我是昏割线(2016.04.16更新)-----------------------------------------------

找工作累如狗呀,不过现在已经找到了一份自己真心喜欢的工作,FPGA硬件开发,真心好棒,给自己点一百个赞。今天晚上回到家里坐下来静静地编会儿程序。


三、转着圈加密

题目与要求:为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。加密办法,如图所示,每一个字母的密文是其后第4个字母,若超出了字母的范围,将A看作为Z的下一个字母,将a看作是z的下一个字线,依次顺延。输入一行字符,要求输出其相应的密码。




代码(自己写的)

/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作    者:刘兵马俑
*完成日期:2016/04/16
*版 本 号:v1.0
*问题描述:键盘缓冲区、处理一连串字符、统计(特殊)字符数量、for和while
*程序输出:
*/
#include<stdio.h>
#include<math.h>
#define N 4 //步长

int main()
{
int iChar;
char ch;
while((ch=getchar())!='\n')
{
//读入的字符含有大写字母时
if(ch>='A'&&ch<='Z')
{
iChar=ch+N;
if(iChar<='Z')  putchar(iChar);
else
switch(iChar-'Z')
{
case 1:
putchar('A');break;
case 2:
putchar('B');break;
case 3:
putchar('C');break;
case 4:
putchar('D');break;
default:;
}
}
//读入的字符含有小写字母时
else if(ch>='a'&&ch<='z')
{
iChar=ch+N;
if(iChar<='z')  putchar(iChar);
else
switch(iChar-'z')
{
case 1:
putchar('a');break;
case 2:
putchar('b');break;
case 3:
putchar('c');break;
case 4:
putchar('d');break;
default:;
}
}
//读入的字符为非字母时,按原样输出
else    putchar(ch);
}
printf("\n");
return 0;
}


运行结果



----------------------------------------------------不要看我哦(2016.04.17更新)--------------------------------------------------------

一大早上起来就开始写代码,啊哈哈哈哈哈,要不要这么正能量!

下面是参考贺利坚老师的代码,非常简练

int main( )
{
char c;
while ((c=getchar( ))!='\n')
{
if((c>='a'&&c<='z')|| (c>='A'&&c<='Z'))
{
c=c+4;
if((c>'Z' && c<='Z'+4) || (c>'z'))
c=c-26;
}
putchar(c);
}
printf("\n");
return 0;
}



四、清楚多余的空格

题目与要求:从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。例如,输入:I   am     a            teacher.,输出I am a teacher.


代码

/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作 者:刘兵马俑
*完成日期:2016/04/16
*版 本 号:v1.0
*问题描述:消除多余的空格
*程序输出:
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
char c, frontIsSpace=0; //frontIsSpace用于记忆前面的符号是否为空格,是空格,值为1,不为空格,为0
while ((c=getchar())!='\n')
{
if (c!=' ')
{
frontIsSpace=0; //在读入下一个字符后,当前的字符,就是下一次所谓前一个,其值不是空格,故赋值为0
putchar(c) ;
}
else if (frontIsSpace==0) //如果前一个不是空格,当前的这个空格是要输出的
{
putchar(c); //输出的是空格
frontIsSpace=1; //在读入下一个字符后,就需要知道,当前的字符,也就是下一次所谓前一个,其值是空格,故赋值为1
}
}
putchar('\n');
return 0;
}



运行结果




五、血型统计

题目与要求:

输入:血型序列(A/B/O/C,C代表AB型血,输入以X结束)

输出:各种血型的数量

输入样例:ABCAOCOAOOBX

输出样例:A:3  B:2  O:4  AB:2

代码

/*
*Copyright (c)2016,刘兵马俑
*All rights reserved.
*文件名称:main.c
*作 者:刘兵马俑
*完成日期:2016/04/17
*版 本 号:v1.0
*问题描述:血型统计
*程序输出:
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
char ch;
int count_A=0,count_B=0,count_O=0,count_AB=0;
while((ch=getchar())!='\n')
{
if(ch=='A')
++count_A;
else if(ch=='B')
++count_B;
else if(ch=='O')
++count_O;
else if(ch=='C')
++count_AB;
else ;//do nothing!
}
printf("A=%d B=%d O=%d AB=%d",count_A,count_B,count_O,count_AB);
return 0;
}



运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息