字符数组和字符串类型(第十八课)
- 格式:ppt
- 大小:243.00 KB
- 文档页数:13
字符数组和字符串1. 字符数组当数组元素的类型是字符串时,这样的数组称为字符数组,以下定义了c为字符型数组.var c:array [1…15] of char;这时可以在c 数组的每个元素内存放一个字符,c数组具有15个元素,因此可以把15个字符放入数组c中.但不允许用以下形式给c数组赋值.c=’This is a book .’而必须一个元素一个元素地赋值,例如:c[1]:=’T’;c[2]=’h’;c[3]:=’i’;c[4]:=’s’; c[5]:=’’; ……c[14]:=’k’; c[15]:=’.’;或者通过输入语句for i:=1 to 15 do read(c[i]);readln;从键盘输入一串字符,放入数组c的各元素中.2. 字符串字符串是有零个或多个字符组成的有限序列.一般记为:’c1c2……cn’ (n>= 0).其中用单引号括起来的字符序列是串的值; ci(1≤i≤n) 可以是字母,数字或字符;串中字符的数目n称为串的长度.字符串是一种特殊的数据类型,称为字符串类型.在TRUBO PASCAL中字符串类型用STRING(N)表示,N指字符串长度,N的值可在1~255之间.以下是两个字符串常量: ‘This is a string.’‘You are students.’值得一提的是,串值必须用一对单引号括起来,但单引号本身不属于串,它的作用只是为了避免与标识符混淆而已.由一个或多个空格组成的串称为空格串,它的长度为串中空格字符的个数.而用两个连着的单引号’’表示空串,空串的长度为0.串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串相应地称为主串.通常称字符在序列中的序号为该字符在串中的位置.子串在主串中的位置则以子串的第一个字符在主串中的位置来表示.例如:假设a,b,c,d为如下的四个串a=’BEI’, b=’JING’c=’BEIJING’d=’BEI JING’则它们的长度分别为3,4,7和8;并且a 和b都是 c和d的子串,a在c和d中的位置都是1,而b在c中的位置是4,在d中的位置是5.定义为字符串类型的变量称为字符串变量,字符串类型与一般字符数组类型相比,有以下一些特征.(1) 字符串(常量或变量)允许进行比较运算(=,<>,>,>=,<,<=).如:‘ABCD’=’ABCD’为true‘ABCD’=’ABCE’为false等等.当且仅当长度、字符和顺序都相同时,两个字符串数据才相等.如果其中有一个不相同,则为不相等.字符串比较大小时,按字符集字符的排列顺序决定大小.(2) 字符串数据可作输入输出语句的参数.(3) 字符串变量存放字符串时,其长度可以变化,可长可短,不象数组那样必须按规定的长度输入和输出数据,字符串变量的实际长度可用length 函数测出.如:Var c:string[80];c:=’How do you do.’则 length(c)=14;实际上,字符串变量有N+1 个元素,从第一个元素开始的所有元素用于存放字符串的各个字符,第0个元素存放字符串的实际长度(以字符的形式存放), 存储方式如下:……c[0]中存放的是序号为14的字符.即ord(c[0])=length(c).(4) 字符串与字符串可以进行相加,相加结果为前后两个字符串相拼接,同时字符串的长度也相应改变,变成两个串的长度之和.如:c1=’Hello ’,c2=’world’,则c=c1+c2=‘Hello world’,且ord(c[0])=ord(c[1])+ord(c[2])字符串的处理一、字符串函数1、测长函数:length(s)功能:测出字符串s的长度。
2021年自考高级语言程序设计知识点总结:字符数组和字符串字符数组和字符串1.字符数组如果数组的元素类型是字符型(char),则此数组就是字符数组。
字符数组的每个元素只能存放一个字符(存放字符的ASCII代码)。
字符数组的定义形式与其它数组的定义形式一样:char字符数组名[元素个数];例如,char S[5];表示数组S有五个元素,每个元素能存放一个字符,整个数组最多可存放五个字符。
字符数组元素的引用方法也与普通数组元素的引用方法相同。
字符数组也可与普通数组一样的初始化,字符数组也可利用字符串常量给字符数组初始化。
例如,char aStr[]={“12345”};并可省略花括弧,简单地写为char aStr[]=“ 12345” ;注意:字符数组aStr[]的元素有六个,不是五个。
用字符串常量对字符数组初始化,C 系统会在字符列末尾添加一个字符串结束符。
2.字符串称最后有字符率结束符’\0’的字符序列为字符串。
字符数组中存储的字符序列本身并不要求最后必然要有字符’\0’.但当字符数组内存储的内容需要作为字符串时,就必需要有标识表记标帜符’\’.当字符数组内存储的是字符串时,可用“%s”格式输出,若是普通的字符序列,则它不能用格式“%s”输出,而只能结合循环用格式“%c”输出。
指定元素个数的字符数组用字符串常量给它初始化时,其元素个数不能小于字符串常量的字符数,但数组的元素个数可以等于字符串常量的字符数。
例如,char ss[3]=“abc”;则,ss[0]=‘a’,ss[l]=‘b’,ss[2]=‘c’.此时,字符数组ss中存储的是字符序列,不是字符串。
字符率结束标识表记标帜符的代码是8位全0,称为空字符,程序用’\0’来标识表记标帜。
字符串的结束标识表记标帜符紧接在字符串的有效字符列之后。
例如,一个有8个有效字符的字符串,其长度为8个字符,但在它的第九个位置存有结束标识表记标帜符’\0’.请读者注意以下几点:(l)字符率与存储字符串的字符数组有区别。
C语⾔字符串替换:字符,字符串,字符数组详解⽬录案例描述案例分析必备知识1,字符数组(1)字符数组的定义(2)字符数组的初始化2,字符串概念(1)字符串的概念(2)⽤字符初始化字符数组(3)获取字符串的长度3,字符串与指针4,字符数组与字符指针总结案例描述字符串替换是处理字符串时最常见的操作之⼀,也是学习字符串必须掌握的知识。
本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。
案例分析我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为⽌。
为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识。
必备知识1,字符数组字符数组是存放字符数据的数组,其中每⼀个元素都是单个字符(1)字符数组的定义字符数组定义的语法格式如下:char 数组名[常量表达式];char 数组名[常量表达式1][常量表达式2]在上述语法中,分别列举了定义⼀维字符数组和⼆维字符数组的⽅法。
⽰例代码如下:char ch[6];(2)字符数组的初始化在数组定义的同时也可以对数组中的元素进⾏赋值,这个过程称为数组的初始化,⽰例代码如下:char c[5] = {'h','e','l','l','o'};注意字符数组的初始化很简单,但要注意以下⼏点。
(1)元素个数不能多于字符数组的⼤⼩,否则编译器会出错(2)如果初始项少于数组长度,则空余元素均会被赋值为空字符(‘\0')(3)如果没有指定数组⼤⼩,则编译器会根据初始项的个数为数组分配长度(4)也可以初始化⼆维数组(和整型数组基本⼀致)2,字符串概念(1)字符串的概念字符串是由数字、字母、下划线和空格等各种字符组成的⼀串字符,是个常量,字符串的末尾都默认有⼀个'\0'作为结束符。
"abcde"" "上⾯这两⾏都是字符串,只不过第⼆个字符串中的字符都是空格字符串在各种编程语⾔中都是⾮常重要的数据类型,但是C语⾔中没有字符串的固定类型,通常⽤字符数组的形式来存储和处理字符串,这种字符数组必须以'\0'结尾。
字符数组与字符串类型引入:NOIP2009高中组复赛第一题(密文破译)一、字符型变量:var ch :char;1、引用单个字符需加上引号,引用字符变量名不需要加引号。
例:ch:=‘a’;read(ch);Write(‘a’);Write(ch);2、多个字符的输入不能像多个数字的输入一样用空格隔开,要连续输入。
因为空格也是一个字符。
例:var a,b,c:char;Read(a,b,c);3、了解字符的ASCⅡ码(见书的附录),学习书上的相关函数(书上24页):ord和chr函数练习:做个小程序,更改英文字母的大小写。
4、明白数字1、2、3和字符‘1’、‘2’、‘3’的差别及如何转换例:把字符ch(ch在‘0’到‘9’之间)转化为相应的数字:转化:ord(ch)-ord(‘0’)二、字符数组:数组基类型(元素的类型)为字符型。
var a:array [ 1..n ] of char ;字符数组的用法与普通数值型数组一样,如输入、输出也是用循环语句逐个元素地给它赋值,即:for i:= 1 to n do read(a[ i ]);三、字符串类型:1、字符串常量:引用字符串需加上引号,引用字符串变量名不需要加引号。
我们经常在writeln语句中用到字符串,例:writeln(‘this is a book。
’) 也可以这样用:const str=‘this is a book。
’;Writeln(str);两种用法效果是一样的2、字符串变量:一般我们直接定义 var str:string;这样字符串最长可为255个字符;也可以这样定义:var str:string[ n ];其中:n为字符串最大长度,为1到255之间的整数如:var name:string[10];此外:ansistring它是一种超长字符串类型。
这种字符串的内存动态分配,这类字符串长度没有限制(可以存储多达20亿个字符!),其字符类型也是ANSIChar 类型。
字符数组和字符串数组demoint _tmain(int argc, _TCHAR* argv[]){char a[5] = {1,2,3,4,5}; //字符数组char b[5] = {1,2,3,4,'\0'}; //字符数组,也可以叫字符串数组;a[5]不可以叫字符串数组char c[5] = "test"; //字符数组,也可以叫字符串数组,a[5]不可以叫字符串数组int arry[5] = {10000,2147483647,2147483647,2147483647,2147483647}; //整型数组getchar();return0;}- a 0x00cffc70"烫烫烫烫烫蘆"char [5][0] 1''char[1] 2''char[2] 3''char[3] 4''char[4] 5''charstrlen(a) 18intsizeof(a) 5 unsigned int- b 0x00cffc60""char [5][0] 1''char[1] 2''char[2] 3''char[3] 4''char[4] 0charstrlen(b) 4intsizeof(b) 5 unsigned int- c 0x00cffc50"test"char [5][0] 116't'char[1] 101'e'char[2] 115's'char[3] 116't'char[4] 0charstrlen(c) 4intsizeof(c) 5 unsigned int- arry 0x00cffc34int [5][0] 10000int[1] 2147483647int[2] 2147483647int[3] 2147483647int[4] 2147483647intstrlen(arry) 2intsizeof(arry) 20 unsigned int1.字符数组的数组长度不等于数组的元素个数 从字符数组b,可以看到我们存放了5个字符,最后的⼀个字符是结束符,计算长度时并没有计算它。
c语言中的字符数组与字符串一、字符数组的定义一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。
char str[20];二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。
char country[10][20];country[i]:第i个字符串二.字符数组的初始化字符数组的初始化.1.可以通过为每个数组元素指定初值字符来实现。
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};char str[ ]={"I am happy"}; 可以省略花括号,如下所示char str[ ]="I am happy";char country[10][20]={“china”,”japanese”,……};注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的char str[15];str="I am happy";strcpy(str, "I am happy");不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。
‘a’“a”区别三、字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。
(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。
例如:char str[10];…… for(i=0; i<10; i++){ scanf(\"%c\", &str);fflush(stdin); /*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。