第三十六课 用循环处理文字 【项目1-5】

第三十六课 用循环处理文字






项目一【M$pszi$y是嘛意思?】


小明让同学传纸条给小丽,纸条上写着M$pszi$y。小丽接到会心一笑,大家却不知所云。
他们俩的花招瞒不过老师,给你一个程序,输入M$pszi$y,输出的,就是小明的真实意思!
老师真坏!下面,该你运行程序了,明白这样的处理方式后,扩展完成后面的两项工作:

  1. #include <stdio.h>  
  2. int main()  
  3. {  
  4.     char ch;  
  5.     while((ch=getchar())!='\n')  
  6.     {  
  7.         putchar(ch-4);  
  8.     }  
  9.     return 0;  
  10. }  
因为他们俩人的“加密”手段泄露,决定纸条由人传,加密数字(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值