您的位置:首页 > 其它

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

2015-12-20 23:06 197 查看

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

项目一【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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: