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

来源:互联网 发布:8684公交软件下载 编辑:程序博客网 时间:2024/06/08 11:04


一、简单示例


代码

/**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;}


运行结果











1 0
原创粉丝点击