#36 用循环处理文字

项目1 转圈加密

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

/**
*Copyright @2018,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年1月19日
*版 本 号:v1.0
*问题描述:每一个字母的密文是其后第4个字母,若超出
*了字母的范围,将A看作为Z的下一个字母,将a看作是z的
*下一个字线,依次顺延。
*/
#include <stdio.h>
int main()
{
    char ch;
    while((ch=getchar())!='\n')
    {
        if ((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
            if (ch<'W'||(ch<'w'&&ch>='a'))
                putchar(ch+4);
            else
                putchar(ch-22);
        else
            putchar(ch);
    }
    return 0;
}

运行结果

这里写图片描述

小结

if (ch<'W'||ch<'w')忘了添加条件ch>='a'导致输入字符在[W,W+4]时出错。

项目2 消除多余的空格

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

/**
*Copyright @2018,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年1月19日
*版 本 号:v1.0
*问题描述:从键盘上输入一句话,直到按回车键为止,
*这些字符被原样输出,但若有连续的一个以上的空格时
*只输出一个空格。例如,输入:I   am     a    teacher.,
*输出I am a teacher.
*/
#include <stdio.h>
int main()
{
    int i=0;
    char ch;
    while((ch=getchar())!='\n')
    {
        if (ch!=' ')    //字符不是空格则输出并将空格标记i置零
        {
            putchar(ch);
            i=0;
        }
        else if ((ch=' ')&&(i==0))  //字符是空格且标志为零(前面没有空格)就输出并将标志置1
        {
            putchar(ch);
            i=1;
        }         //字符是空格且标志为1(前面有空格)就不输出,继续循环
    }
    return 0;
}

运行结果

这里写图片描述

小结

刚开始写循环体没处着手,然后稿纸上分析一下:1.当前输入非空格,直接输出;2.当前输入空格,如果前一个字符非空格,则输出当前空格并标记已有一个空格,反之不输出继续循环。由于前一个字符在当前循环已被覆盖,需要用个变量记住它的空格状态。
代码else if ((ch=' ')&&(i==0))可优化为else if (i==0)

项目3 血型统计

黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的样本数目。
输入:血型序列(A/B/O/C,C代表AB型血,输入以X结束)
输出:各种血型的数量
输入样例:ABCAOCOAOOBX
输出样例:A:3 B:2 O:4 AB:2

/**
*Copyright @2018,CSDN学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年1月19日
*版 本 号:v1.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,o=0,c=0;
    char ch;
    while((ch=getchar())!='X')
    {
        switch (ch)
        {
        case 'A':
            a++;
            continue;
        case 'B':
            b++;
            continue;
        case 'O':
            o++;
            continue;
        case 'C':
            c++;
            continue;
        default:
            printf("wrong type");
            return 0;
        }

    }
    printf("A:%d B:%d O:%d C:%d",a,b,o,c);
    return 0;
}

运行结果

这里写图片描述

小结

switch后记得给括号,变量记得赋初值。

猜你喜欢

转载自blog.csdn.net/epsilono1/article/details/79111470
36