一、★字符型 讲解
字符型用char作为标识符。字符型常量必须用单引号括起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符。如果有多个字符则是字符串类型string,前后必须加双引号。
int、double等类型,在读入时,碰到空格、回车之类的是不影响读入的。
但是在字符读入时,就需要注意这些了,因为空格、回车等都属于字符类型,如果是字符读入时,它们也是读入的一部分,需要注意。
字符类型是一类比较特殊的字符。所有的字母、数字、符号、控制符(空格、回车之类的)都在字符范围之内,可以说键盘能输入的内容都可以当做字符处理。
所以,学完字符后,数字的概念就有两种表达方式了:字符数字和以前使用的纯粹的数字。有什么区别呢?
计算机在设计的时候,就给每个字符设置了唯一的ASCII码,可以理解为每个字符都有自己的身份证编码,这个编码是统一的(见下表)。这个编码是数字,编码的数字对应的就是字符。
比如: 'A'的ASCII值是65,如果你把65赋值给一个字符变量,就是 'A';
如果你把 'A'赋值给一个整型变量,就是65;
比如下面的程序:
#include <cstdio>
#include <iostream>
using namespace std;
char c1; //定义字符型
int a;
int main() {
c1 = 'A'; //给c1赋值一个字符。注意字符前后加单引号
a = 'A';
printf("%d %d %c", c1, a, a);
return 0;
}
'1'和 1 是不一样的, '1'的ASCII值是49,1就是1,两个值是不等价的。在使用的时候要注意转换。
#include <cstdio>
#include <iostream>
using namespace std;
char c1; //定义字符型
int a;
int main() {
c1 = '1'; //给c1赋值一个字符。注意字符前后加单引号
a = c1 - '0'; //或者如果你知道字符 '0' 的ASCII值是48,也可以这么写: a=c1-48;
printf("%c %d", c1, a); //前面是字符数字,用%c格式符,后面是纯数字,用%d
return 0;
}
下面来看下字符的读入方式:
样例:读入两个字符,字符之间用空格隔开,判断两个字符是否相等,等则输出“Equ”,否则输出“Not Equ” C语言格式一:
#include <cstdio>
#include <iostream> //2510
using namespace std;
char c1, c2; //定义字符型
int main() {
scanf("%c %c", &c1, &c2); //字符型的格式符是%c 。注意两个%c中间有加了个空格
//这个空格用来就是对应读入的两个字符中间的空格
if (c1 == c2) //比较两个字符是否相等
printf("Equ");
else
printf("Not Equ");
return 0;
}
C语言格式二:使用getchar()
getchar()的读入速度非常快,在有些题目输入数据很大的时候还必须用getchar()来优化读入速度。
#include <cstdio>
#include <iostream> //2510
using namespace std;
char c1, c2; //定义字符型
int main() {
c1 = getchar(); //读入第一个字符
c2 = getchar(); //读入的第二个字符是中间的空格,必须处理
c2 = getchar(); // c2再读入一次,这次读到的才是第三个需要的字符
if (c1 == c2) //比较两个字符是否相等
printf("Equ");
else
printf("Not Equ");
return 0;
}
C++ 语言格式:
#include <cstdio>
#include <iostream> //2510
using namespace std;
char c1, c2; //定义字符型
int main() {
cin >> c1 >> c2; // cin语句比较特殊,它会自动忽略空白字符,所以用cin读入时可以像整数
//那样正常读入。但是如果题目要求空格也要读入时就不能用cin了
if (c1 == c2) //比较两个字符是否相等
printf("Equ");
else
printf("Not Equ");
return 0;
}
二、例题
找出混在字母代码里的数字字符。
提示:除了使用while循环,本题也可以使用for循环来控制读入for (char c = getchar(); c != '?'; c = getchar()){
循环语句。。。 } }
输入有一行字符,以‘?’结尾。
按顺序输出其中的数字
输入样例 1
sdlkfsjdkf45kldksfjlksdfk6dksfjsdkf7lkdfksd?
输出样例 1
4567
出题人及讲解人:ptyz -- lzy老师
三、代码讲解
思路
定义一个字符,每次输入,如果字符的ASCII码在'0'(48)至'9'(57)之间,输出;否则继续输入字符。
(也可以用字符串来做)
代码一
——摘自zyc200156
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
for(char c=getchar();c!='?';c=getchar())
if(c>='0'&&c<='9')cout<<c;
}
代码二
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a=0;
while(a!='?')
{
a=getchar();
if(a>='0'&&a<='9')cout<<a;
}
return 0;
}
四、ASCII码表
注:32至127是可显示字符