您好,欢迎访问三七文档
1.6字符数组和字符串使用赵修彬山东省聊城第一中学•字符类型知识回顾•字符数组与字符串基础知识•字符数组与字符串操作1.6.1字符•计算机程序处理的数据类型也可以概括的分为数值型数据和非数值型数据两大类,前面学习的内容多以数值型数据的运算或处理为主,接下来我们开始了解一种最基本的非数值型数据的处理知识——字符类型;•字符类型为由一个单个字符组成的数据。通常使用一对单引号将单个字符括起来的表示形式,如’a’、‘‘、‘.’等。•程序设计中常用到的是字符常量或字符变量。1.6.1字符•字符常量定义:•const字符常量标识符=’单个字符’;•例如:•constch1=’A’;•说明:本语句说明或定义了一个字符类型的常量,该常量表示的字符数据为‘A’•字符变量是用来存放单个字符的变量,即只能表示一个单个字符;•字符变量定义:•char字符变量标识符;•例如:•charch1,ch2;•表示定义了两个字符变量ch1和ch2,每个变量进可以表示或者存放一个字符,因此可以利用如下语句赋值:•ch1=’a’;ch2=’b’;ch1=’’•也开始相互赋值ch2=ch1;•字符与整数的通用性(对应性)关系•前面我们知道,字符数据在内存中是以该字符对应的ASCII编码存储,也即是说每一个常见字符在内存中都与一个唯一的序值一一对应。•在实际程序设计中,一个字符数据既可以以字符形式输出,也可以以整数(ASCII表中的序值)形式输出,还可以对它们进行算术运算。ASCII码值字符ASCII码值字符0nul(空)65A32space(空格)90Z48097a579122z•字符和整数之间的通用性(对应性)验证:•字符与整数的通用性(对应性)验证•字符数据和整数数据进行基本运算:•字符与整数的通用性(对应性)关系•利用字符和整数间的通用性来实现大小写字母的转换:•思考1、如果我们需要将任意的大写字母转换为小写字母或者小写字母转换为大写字母,如何编写代码?•思考2、如果我们需要将从键盘中接收的英文字母进行大小写的转换,如何编写代码(假设我们输入的字符除了作为键盘字符输入结束’#’外都是英文字母),如何编写实现?•例将读入的任意英文字母进行大小写转换•以上为单个字符的基本知识与处理,如果是连续的多个字符需要处理,我们将如何解决?•逐一处理——分别对其中的每一个字符进行分别处理——字符数组•整体处理——将连续的字符看做一个整体进行处理——字符串•1、字符数组•我们前面学习数组时已经知道:无论数组的元素有多少个,数组中每个元素的类型必须相同,而且数组元素的类型可以是任何已定义的数据类型,如整形、字符型、实型等。当一个数组的元素类型为字符型时,我们称这个数组为字符数组。字符数组的每一个元素都是一个字符。(连续的单个字符)•字符数组是计算机非数值处理的基本实现方式之一•例如:•charc[5];•c[0]='H';c[1]='e';c[2]='l';c[3]='l';c[4]='o';•其在内存中的存储形式如图所示:Hello1.6.2字符数组与字符串基础字符数组与字符串基础•2、字符串•字符串是一对双引号括起来的字符序列(字符组成的整体)•如”Helloworld!”、“abcdefg”、”a”、“”等。•特别的是,每个字符串的结尾都有一个“字符串结束标志”,以便系统据此判断字符串是否结束。C++语言中用字符’\0’作为字符串结束的标志,’\0’是一个ASCII码为0的字符,占用一个字节,例如有一个字符串”Hello”,在内存里的实际存储如下图所示:•说明:这个字符串占用的不是5个字节,而是6个字节,最后一个字节里面存放的是字符串结束标志’\0’。但是在输出时不会输出’\0’。•又如,charst[]=”abcde”;st2[5];•coutsizeof(st);•输出的结果是6,因为内存空间实际需要开辟6个字节,用以存放5个可见的字符,以及一个不可见的字符’\0’,所以该字符串的总长度为6。•说明:在输入字符串内容的时候是不需要加’\0’的,’\0’是系统自动添加作为字符串结束标志的。Hello\0•字符常量和字符串常量区别•①两者的定界符不同,字符常量由单引号括起来,字符串常量由双引号括起来。•②字符常量只能是单个字符,字符串常量则可以是多个字符。•③可以把一个字符常量赋给一个字符变量,但不能把一个字符串常量赋给一个字符变量。•④字符常量占一个字节,而字符串常量占用字节数等于字符串的字节数加1。增加的一个字节中存放字符串结束标志‘\0’。例如:字符常量‘a’占一个字节,字符串常量“a”占二个字节。字符数组与字符串基础字符数组的操作•3、字符数组的定义与赋值•(1)字符数组的定义格式•字符数组定义格式同一般数组,所不同的是数组元素类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。具体格式如下:•char数组名[常量表达式1]…•例如:•charch1[5];//数组ch1是一个具有5个字符元素的一维字符数组•charch2[3][5];//数组ch2是一个具有15个字符元素的二维字符数组•(2)字符数组的赋值•字符数组赋值类似于一维数组,赋值分为数组的初始化和数组元素的赋值。初始化的方式有用字符初始化和用字符串初始化两种,也有用初始值表进行初始化的。•1).用字符初始化数组•例如:charchr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};•初始值表中的每个数据项是一个字符,用字符给数组chr1的各个元素初始化。当初始值个数少于元素个数时,从首元素开始赋值,剩余元素默认为空字符。•如果提供的初值个数与预定的数组长度相同,在定义是可以省略数组长度,系统会自动根据初值个数确定数组长度,如:•charchr1[]={‘a’,‘b’,‘c’,‘d’,‘e’};•这样就定义了一个长度为5的字符数组,每一个元素如大括号内的字符。•也可以定义和初始化一个二维字符数组,如:•charchr[3][3]={‘a’,‘b’,‘c’,‘d’,‘e’};字符数组的操作•字符数组中也可以存放若干个字符,也可以来存放字符串。两者的区别是字符串有一结束符(‘\0’)。反过来说,在一维字符数组中存放着带有结束符的若干个字符可以称为字符串。字符串是一维字符数组,但是一维字符数组不等于字符串。•例如:•charchr2[5]={‘a’,‘b’,‘c’,‘d’,‘\0’};即在数组chr2中存放着一个字符串“abcd”。字符数组的操作•(2)用字符串初始化数组•用一个字符串初始化一个一维字符数组,可以写成下列形式:•charchr2[5]=“abcd”;•使用此格式均要注意字符串的长度应小于字符数组的大小或等于字符数组的大小减1(为何?)。同理,对二维字符数组来讲,可存放若干个字符串。可使用由若干个字符串组成的初始值表给二维字符数组初始化。•例如:charchr3[3][4]={“abc”,“mno”,“xyz”};在数组ch3中存放3个字符串,每个字符串的长度不得大于3。字符数组的操作•(3)字符数组元素赋值•字符数组的赋值是给该字符数组的各个元素赋一个字符值。•例如:•charchr[3];•chr[0]=‘a’;chr[1]=‘b’;chr[2]=‘c’;•对二维、三维字符数组也是如此。当需要将一个数组的全部元素值赋予另一数组时,不可以用数组名直接赋值的方式,要使用字符串拷贝函数来完成。字符数组的操作字符串的基本操作•4、字符串的输入与输出•字符串可以作为一维字符数组来处理,那么字符串的输入和输出也可以按照数组元素来处理,本节不再做介绍。本节仅介绍将字符串作为一个整体进行输入和输出的语句。•(1)输入•从键盘输入一个字符数组可以使用scanf语句或gets语句。•1)scanf语句•格式:scanf(“%s”,字符串名称);•说明:•①这里的字符串名称之前不加&这个取地址符。例如:scanf(“%s”,&s1)是错误的。•②系统会自动在输入的字符串常量后添加‘\0’标志,因此输入时,仅输入字符串的内容即可。•③输入多个字符串时,以空格分隔。•例如:scanf(“%s%s%s”,s1,s2,s3);从键盘分别输入Letusgo,则三个字符串分别获取了三个单词。反过来可以想到,如果仅有一个输入字符串名称的情况下,字符串变量仅获取空格前的内容。(字符串内容从非空格字符开始,结束于下一个空格字符前)•例如:scanf(“%s”,s1);从键盘分别输入Letusgo,则仅有第一个单词被获取,即s1变量仅获取第一个单词Let。字符串的基本操作•2)gets语句•格式:gets(字符串名称);•说明:•使用gets只能输入一个字符串。•例如:gets(s1,s2);是错误的。使用gets,是从光标开始的地方读到换行符也就是说读入的是一整行,而使用scanf是从光标开始的地方到空格,如果这一行没有空格,才读到行尾;cin语句也是遇到空格即表示该字符串输入结束。•例如:scanf(“%s”,s1);gets(s2);对于相同的输入HelloWorld!。s1获取的结果仅仅是Hello,而s2获取的结果则是HelloWorld!•该函数语句与cin再输入字符串方面的差别是:使用gets()语句输入的字符可以包含,字符串的基本操作•(2)字符串的输出•向屏幕输出一个字符串可以使用printf语句或puts语句。•1)printf语句•格式:printf(“%s”,字符串名称);•说明:•①用%s格式输出时,printf的输出项只能是字符串(字符数组)名称,而不能是数组元素。例如:printf(“%s”,a[5]);是错误的。•②输出的内容不包括字符串结束标志符‘\0’。•2)puts语句•格式:puts(字符串名称);•说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf(“%s\n”,a)和puts(a)是等价的。字符串的基本操作•字符串中单个字符的引用:•例C++中,一个字符串中的字符可以通过其对应的下标灵活使用。•#includecstdio//gets()调用cstdio库•#includeiostream•#includecstring//strlen()调用cstring库,调用string库在高版C++下编译出错•usingnamespacestd;•intmain()•{•charst[100];•gets(st);//gets为专门读字符串的•函数,读取一行字符串•for(inti=0;istrlen(st);++i)//输出st串中的第i个字符•coutst[i];•return0;•}字符串的基本操作字符串处理函数系统提供了一些字符串处理函数,用来为用户提供一些字符串的运算。常用的字符串函数介绍如下。函数格式函数功能strcat(st1,st2)将st2连接到st1后边,返回st1的值。(+)strncat(st1,st2,n)将st2前n个字符连接到st1后边,返回st1的值。(有选择的+)strcpy(st1,st2)将st2复制到st1中,返回st1的值。(赋值)strncpy(st1,st2,n)将st2前n个字符复制到st1中,返回st1的值。(前n个字符复制替换,其他不影响)strcmp(st1,st2)比较st1和st2的大小,比较的结果由函数带回;如果st1st2,返回一个正整数;如果st1=st2,返回0;如果st1st2,返回一个负整数;(首先逐位按照字符ASCII码值比较,如果对应位都相同,则长串大)strncmp(st1,st2,n)比较st1和st2的前n个字符进行比较,函数返回值的情况同strcmp函数;strlen(st)计算st的长度,终止符’\0’不算在长度之内strlwr(st)将st中大写字母换成小写字母strupr(st)将st中小写字母换成大写字母字符串常用操作函数演示1.6.3典型例题•例1.6.1按字母表顺序和逆序每隔一个字母打印。即打印出:•
本文标题:16字符串使用
链接地址:https://www.777doc.com/doc-3022123 .html