一.回顾:字符处理
#include <stdio.h>
int main()
{
char c;
c = getchar(); //输入大写字母
putchar(c + 32);//转换小写字母
putchar('\n'); //换行操作
return 0; //main中可省略
}
ABC //B C 存入缓冲区
a //只输出一个字符
二.输出什么?
#include <stdio.h>
int main()
{
char c;
while ((c = getchar())!='\n' )
{
putchar(c);
}
}
运行结果:
Program
Program
#include <stdio.h>
int main()
{
char c;
while ((c = getchar())!='\n' )
{
putchar(c+4);
}
}
运行结果:
Program
Tvskveq //简单加密
#include <stdio.h>
int main()
{
char c;
while ((c = getchar())!='#' )
{
putchar(c+32);
}
}
运行结果:
PROGRAM#CPP
program
三.统计输入字符个数
#include <stdio.h>
int main()
{
char c;
int count = 0;
while ((c = getchar())!='\n' )
{
count++;
}
printf("共输入字符%d个\n", count);
}
运行结果:
little boy
共输入字符10个
用for循环的处理办法
#include <stdio.h>
int main()
{
char c;
int i;
for (i = 0; (c = getchar()) != '\n'; i++)
putchar(c+4);
printf("\n共输入字符%d个\n", i);
}
little boy
pmxxpi$fs}
共输入字符10个
四.统计数字字符个数
#include <stdio.h>
int main()
{
char c;
int n=0;
while((c=getchar())!='\n')
{
if(c>='0'&&c<='9') n++;
}
printf("输入的数字字符有%d个\n", n);
return 0;
}
运行结果:
abcde12345fg67
输入的数字字符有7个
五.实践项目
【项目1:简单的加密 】
编写程序,将输入的字符进行加密且输出加密后字符,加密的数字可自己设定;
#include <stdio.h>
int main()
{
char ch;
int n;
scanf_s("%d", &n);
while ((ch = getchar()) != '\n')
{
putchar(ch - n);
}
}
【项目2:转着圈加密】
为使电文保密,需将电文转成密码,收报人再译回原文。加密办法,每一个字母的密文是其后第4个字母,若超出了字母的范围,将A/a看作为Z/z的下一个字母,依次顺延。输入一行字符,输出其相应的密码.
#include <stdio.h>
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 > 'Z' && c <= 'Z' + 4,为了避免将小写字母转换;
// c > 'z'&& c<='z'+4,其中c一定是c<='z'+4,故省略;
{
c = c - 26;
}
}
putchar(c);
}
printf("\n");
}
运行结果:
AaBbZz
EeFfDd
【项目3:消除多余的空格】
从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格。例如,输入:I am a teacher.,输出I am a teacher.
#include <stdio.h>
int main()
{
char c, frontIsSpace = 0;
while ((c=getchar())!='\n')
{
if (c != ' ')
{
putchar(c);
frontIsSpace = 0;
}
else if (frontIsSpace == 0) //在c==' '的前提下
{
putchar(c);
frontIsSpace = 1;
}
}
}
【项目4:血型统计】
黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的样本数目。
输入:血型序列(A/B/O/C,C代表AB型血,输入以X结束)
输出:各种血型的数量
输入样例:ABCAOCOAOOBX
输出样例:A:3 B:2 O:4 AB:2
#include <stdio.h>
int main()
{
char c, countA = 0, countB = 0, countO = 0, countC = 0;
while ((c = getchar()) != 'X')
{
if (c == 'A')
{
++countA;
}
else if (c == 'B')
{
++countB;
}
else if (c == 'O')
{
++countO;
}
else if (c == 'C')
{
++countC;
}
}
printf("A:%d B:%d O:%d AB:%d\n", countA, countB, countO, countC);
}
#include <stdio.h>
int main()
{
char c, countA = 0, countB = 0, countO = 0, countC = 0;
while ((c = getchar()) != 'X')
{
switch (c)
{
case 'A': ++countA; break;
case 'B': ++countB; break;
case 'C': ++countC; break;
case 'O': ++countO; break;
}
}
printf("A:%d B:%d O:%d AB:%d\n", countA, countB, countO, countC);
}
【项目5:有多少符号】
输入一行文字,以回车结束,统计并输出其中数字、空格、字母出现的次数,以及输入的字符总数。
#include <stdio.h>
int main()
{
char c, countA = 0, countB = 0, countC = 0, countD = 0;
while ((c = getchar()) != '\n')
{
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') ++countA;
else if (c >= '0' && c <= '9') ++countB;
else if (c == ' ') ++countC;
++countD;
}
printf("字母:%d 数字:%d 空格:%d 总计:%d\n", countA, countB, countC, countD);
}