ascii码为0的字符_6.文字处理,字符型及字符串型——char、string

五、文字处理,字符型及字符串型——char、string

除了进行数值计算,电脑也擅长进行文字信息处理,下面我们介绍字符型数据及字符型变量。

恺撒密码(Caesar cipher)是一种简单且广为人知的加密技术。其明文字母与密文字母对应关系:

d06b84fba4095599205ae2e6566de739.png

加密时,在上表中查找需要加密消息中的每一个明文字母,找出对应的密文字母,在原消息中完成替换。

例如I LOVE YOU 被加密成L ORYH BRX。

例1.3.6加密 某部门需对长度是4个字母的单词进行加密,使用字母替代加密法,加密规则:一个字母用编码(ASCII编码表见附录ASCII码表)位于其后面的第三个字母代替(例如用’D’代替’A’),下面程序输入4个字母的单词,输出加密后的单词。

#include 

运行程序,若输入good,则输出是:jrrg

char 字符型 用单引号括起来的一个符号,就是一个字符数据,char可用来定义字符型的变量。英文中的每个符号(字母、数字、标点符号等),都有数值编码,在ASCII(American Standard Code for Information Interchange)码表中有一个对应的8位(即一个字节Byte)二进制编码,见附录B。下面是一些字符的编码:

'A'的编码为“01000001”,对应的十进制数是65、十六进制数是0x41,参见第二章;

'a'的编码为“01100001”,对应的十进制数是97、十六进制数是0x61;

'b'的编码为“01100010”,对应的十进制数是98、十六进制数是0x62;

'0'的编码为“00110000”,对应的十进制数是48、十六进制数是0x30;

' ' 空格的编码为“00100000”,对应的十进制数是32、十六进制数是0x20;

……

变量说明语句“char ch1,ch2,ch3,ch4,c1,c2,c3,c4;”定义了8个字符型变量,每个变量可存放一个字符。执行赋值表达式语句“c1=ch1+3;”时,首先把字符变量ch1存放的字符(ASCII码值)转换成整数类型,然后进行加法运算,再把结果转换成字符类型数据(8位ASCII码值),并赋值给变量c1。类型转换详见第二章第四节。

字符常量(单个字符)要用单引号括起来,例'A'、'6'、'*'。字符串常量(指一个以上的字符)要用双引号括起来,例"Welcome"、 "A"、"^&*!23djkf"。字符'A'占用一个字节的存储空间,字符串"A"占用二个字节的存储空间。注意字符串"2" 、字符'2'和数值2的区别。8个二进制(bit)构成一个字节(Byte),在机器中,“”用具有两种稳定物理状态的器件表示。位、字节的详细介绍参见第二章。

aacd796008c9df58d03182132be15de6.png

对于字符型数据,内部存储为整数(即ASCII编码),外部表现为文字符号。查ASCII码表(附录B)可以知道某字符的ASCII码值,也可用下面程序求出字符的ASCII码值。

例1.3.7编写程序,输入一个字符,输出它的ASCII码值。

a5a6bef82191af4811166de249581d60.png

运行程序,若输入A,则输出为65

字符型数据的+运算,实际上是它的ASCII码值的+运算。字符型数据可以进行比较(>=, <,!=等)运算。例如’A’>’B’的值是假0,’a’>’B’的值是真1。

使用cin输入命令时,以空格键、跳格键Tab、回车键Enter作为输入对象的分隔符,所以,要输入“空格”字符本身,要使用scanf("%c",&ch);命令

string类型 c++提供了字符串类型(c语言没有此类型,它是c++通过类的定义机制扩展的,是c++标准库类型),在程序开头增加“#include <string>”指令,即可使用string类型变量及相应的运算(函数)。

例1.3.8向某人问好。

e4921b494fdb2cd62cf1a0b8c6514b59.png

运行程序,输入:

Zhao Fengping

输出为:

Hello, Zhao Fengping!

使用cin输入命令,会略过空白符(指空格、Tab、回车符Enter),然后读入数据到变量中,直到遇见下一个空白符或变量已装满为止,故例1.3.7要使用“scanf("%c",&ch);”,程序运行时才能输入空格符' '

再测试运行例1.3.8程序,按1次回车键、空格键及(或)Tab键,再输入Zhao,然后按1次回车键及空格键或Tab键,再输入Fengping,最后按回车键。输出结果是否和原来的一样?

输入整行字符串(含空格,以回车符Enter结束到字符串变量s,使用“getline(cin,s);”命令。

把例1.3.8程序的第7、8行删去,换成“getline(cin,name);”命令,以下面几种输入方式测试程序:

1. Zhao Fengping

2. 按1次回车键……,然后(就没有然后了)按空格键及(或)Tab键,再输入Zhao,……

3. 按3次空格键,再输入Zhao,按空格、Tab键、按回车键……

再测试运行例1.3.3程序,在输入的3个数据2、3、1之前或中间按任意次数的空白符(指空格、Tab、回车符Enter),输入数值1之后的回车表示输入结束。结果输出与原来一样。cin是如何“吃进”数据的?

1.3.8表明,string类型的字符串可以进行赋值(=)及连接运算(+);对于连接运算+,+号两边的运算对象有一个必须是string类型的字符串变量。例如 "abc"+"xy"或"abc"+'!'是错误的用法。

字符串也可以进行比较运算,字符串比较原理:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符 或其中之一已结束……。字符串的更多操作是通过string库函数实现的。

字符串的比较操作

string s,t; s="as"; t="AS";

cout<<(s<=t)<<endl; //a的ASCII码是97,A的ASCII码是65,结果是0

s="as";t="asd";

cout<<(s<t)<<endl; //结果是1

s="^&*%";t="^&%$@"; //*的ASCII码是42 %的ASCII码是37

cout<<(s<t)<<endl; //结果是0

访问字符串的单个字符 字符串是一个整体,但是也可以存取(访问)字符串中指定的第几个字符 。

char ch; int k; string s="abcde"; //定义变量s,同时设置初值为"abcde"

s[1]= 'A'; // 字符串s的第二个字符设置成字符'A'

cout<<s[0]<<s<<endl; // 输出s的第一个字符及s,即:aaAcde

ch=s[2]; // 取字符串s的第三个字符'c'入字符变量ch

k=2; cout<< s[k]<<endl; // 输出字符串s的第k+1(3)个字符

cout<< s[1+2]<<endl; // 思考:输出字符串s的几个字符?输出是什么?

k=3; cout<< s[k-1]<<endl; // 思考:输出字符串s的第几个字符?输出是什么?

用函数size()或length()求出字符串长度,可以知道字符串s中有几个字符。

string s="abcde"; int len; //定义变量s,同时设置初值为"abcde"

cout<< s.size()<<endl; //显示字符串s的长度。s.size()即字符串s的长度,此处输出5

len= s.size();

cout<< s[len-1]<<endl; //输出字符串s的最后一个字符。

cout<< s[s.size()/2]<<endl; //思考:输出字符串s的哪一个字符?

下一篇 7.逻辑判断及逻辑运算,布尔型——bool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值