本次课内容:字符数组和字符串 教学目的:掌握字符串存储方法、字符数组定义方法、初始化方法。 字符串的输入、输出及函数使用方法。 重点:字符串概念、字符二维数组,字符数组定义、初始化和输入 输出处理。 难点:二维数组概念、字符数组处理方法。 预习:二维数组 二维数组通过两个下标定义,第一个下标一般表示行,第二个 下标表示列。 2、二维数组可看作是一个一维数组,每个数组元素又是一个一维 数组。 3、二维数组初始化可用一对花括号将一行的数据括起来,也可去 掉每行的花括号,此时将所有数据按数组元素在内存的排列顺序存 放 4、二维数组元素引用时,一般采用双重循环结构,外循环变量一 般表示行下标,内循环变量一般表示列下标。 5、二维数组一般处理表或矩阵数据。 6、二维数组作为实参时,形参也应是二维数组(目前)
本次课内容:字符数组和字符串 教学目的:掌握字符串存储方法、字符数组定义方法、初始化方法。 字符串的输入、输出及函数使用方法。 重点:字符串概念、字符二维数组,字符数组定义、初始化和输入 输出处理。 难点:二维数组概念、字符数组处理方法。 预习:二维数组 1、二维数组通过两个下标定义,第一个下标一般表示行,第二个 下标表示列。 2、二维数组可看作是一个一维数组,每个数组元素又是一个一维 数组。 3、二维数组初始化可用一对花括号将一行的数据括起来,也可去 掉每行的花括号,此时将所有数据按数组元素在内存的排列顺序存 放。 4、二维数组元素引用时,一般采用双重循环结构,外循环变量一 般表示行下标,内循环变量一般表示列下标。 5、二维数组一般处理表或矩阵数据。 6、二维数组作为实参时,形参也应是二维数组(目前)
字符串和字符串的存储方法 字符串:若干有效字符的序列。 有效字符:字母、数字、专用字符、转义字符等。 字符串是借助于字符型一维数组来存放的。 规定:字符串以字符“Ⅶ0‘(ASC值为0)作为结束标志。 V0作为标志占用存储空间,但不计入串的实际长度。 C语言中无字符串类型,但允许使用“字符串常量”。在表示 字符串常量时,不需要人为在其末尾加入“0°,编译程序自动加入。 如:“ Hello”不必写成“ Hello\0” 字符串数组的定义: char数组名常量表达式|; 如: char ch[10l; 可以存放10个字符,其中包括“0。 、字符串数组的初始化 逐元素赋初值 如: char ch[10={H,’e,’l,',’o,”\0} He|1o|00000
一、字符串和字符串的存储方法 字符串:若干有效字符的序列。 有效字符:字母、数字、专用字符、转义字符等。 字符串是借助于字符型一维数组来存放的。 规定:字符串以字符‘\0‘(ASCII值为0)作为结束标志。 ’\0’作为标志占用存储空间,但不计入串的实际长度。 C语言中无字符串类型,但允许使用“字符串常量”。在表示 字符串常量时,不需要人为在其末尾加入‘0’,编译程序自动加入。 如:“Hello” 不必写成 “Hello\0” 字符串数组的定义: char 数组名[常量表达式]; 如:char ch[10]; 可以存放10个字符,其中包括‘\0’。 二、字符串数组的初始化 1、逐元素赋初值 如:char ch[10]={‘H’,’e’,’l’,’l’,’o’,’\0’}; H e l l o \0 \0 \0 \0 \0
又如: char ch10}=H,e',,",’o}; H V0O000 此例虽未加“饿0’,但由于所赋字符数不足,则自动用“0补充。 又如: charch5]={H,e',,’o’}; 此时数组不能作为字符串,按各元素字符处理(结尾无“0)。 2、指定一个字符串初值 如: char cl={“Heo”}; C编译程序自动加上“10 字符串的输入 、输入一个字符 如: char str5 scanf(%c”,<str[0J) 2、输入一个字符串 如: scanf(“%s”,str); 注:引用数组名时不加&,输入时不加引号,编译程序自动加“0。 系统以空格或回车来作为字符串的间隔符
又如:char ch[10]={‘H’,’e’,’l’,’l’,’o’}; 此例虽未加‘\0’,但由于所赋字符数不足,则自动用‘\0’补充。 又如:char ch[5]={‘H’,’e’,’l’,’l’,’o’}; 此时数组不能作为字符串,按各元素字符处理(结尾无‘\0‘)。 2、指定一个字符串初值 如:char c[ ]={“Hello”}; C编译程序自动加上‘\0’。 三、字符串的输入 1、输入一个字符 如 :char str[5]; scanf(“%c”,&str[0]); 2、输入一个字符串 如:scanf(“%s”,str); 注:引用数组名时不加&,输入时不加引号,编译程序自动加‘\0’。 系统以空格或回车来作为字符串的间隔符。 H e l l o \0 \0 \0 \0 \0 H e l l o
3、用gets(函数输入字符串 如: char str{9; gets(str) 此函数对输入的字符(包括空格)全部读入,直到遇到加车 符为止 如:输入字符串为: computer&C 四、字符串的输出 、输出单个字符 如: printf(“%c”,str);指出数组的具体元素,格式符%C 2、输出字符串 如:prin(,str);使用数组名,格式符%S 注:字符串中尾部的“0不作为输出内容。 3、用puts()函数输出字符串 如: char strl9; gets( str ) puts(str) 注: puts函数输出时将‘V0作为换行符,即每次输入一行
3、用gets( )函数输入字符串 如:char str[ 9 ]; gets(str); 此函数对输入的字符(包括空格)全部读入,直到遇到加车 符为止。 如:输入字符串为:computer & C 四、字符串的输出 1、输出单个字符 如:printf(“%c”,str[0]); 指出数组的具体元素,格式符%C 2、输出字符串 如:printf(“%s”,str); 使用数组名,格式符%S 注:字符串中尾部的‘\0‘不作为输出内容。 3、用puts( )函数输出字符串 如:char str[ 9 ]; gets( str ); puts(str); 注:puts( )函数输出时将‘\0‘作为换行符,即每次输入一行
五、字符串运算函数 1、字符串拷贝函数 格式: strep(字符数组名,字符串表达式) 如: strep(str,“ china); 注:(1)复制时,连同“0一起复制到字符数组中; (2)字符串表达式可以是字符数组名 char strl8l, str2[=(computer") strcpy( strl, str2); printi(%smn”,str1); 结果为: computer (3)对字符数组不能用“=”直接赋值; 如: char str1|81; str=china 9 是错误的 2、字符串联接函数 格式: strcat(sr1,r2); 功能:将str2联接到str的后面,最后加一个“0,结果放在str1 中 如:P169例58图525
五、字符串运算函数 1、字符串拷贝函数 格式:strcpy(字符数组名,字符串表达式) 如:strcpy( str , “china”); 注 : (1)复制时,连同‘\0‘一起复制到字符数组中; (2)字符串表达式可以是字符数组名 ; char str1[81],str2[ ]={“computer”}; strcpy( str1, str2); printf(“%s\n”,str1); 结果为: computer (3)对字符数组不能用“=”直接赋值; 如:char str1[81]; str=“china”; 是错误的 2、字符串联接函数 格式:strcat( str1,str2); 功能:将str2联接到str1的后面,最后加一个‘\0‘ ,结果 放在str1 中。 如:P169_例5.8 图5.25
3、字符串比较函数 格式: strcmp(字符串1,字符串2) 功能: 字符串1>字符串2返回值:正整数 字符串1=字符串2返回值:0 字符串1<字符串2返回值:负整数 比较方法:两字符串对应按ASCI值进行比较。 4、测字符串长度函数 格式: strlen(字符表达式); 功能:得到字符表达式“0“之前的全部字符个数 如: char str10; gets(str1); printf( od,strlen(strD)) 输入字符串为:asdf 结果为:4
3、字符串比较函数 格式:strcmp(字符串1,字符串2) 功能: 字符串1>字符串2 返回值:正整数 字符串1=字符串2 返回值:0 字符串1<字符串2 返回值:负整数 比较方法:两字符串对应按ASCII值进行比较。 4、测字符串长度函数 格式:strlen( 字符表达式); 功能:得到字符表达式‘\0‘之前的全部字符个数。 如: char str1[10]; gets(str1); printf(“%d”,strlen(str1)); 输入字符串为:asdf 结果为:4
六、二维字符数组 1、二维数组 由若干个一维数组组成。 如: static char str|3J6={“aaa”,“bbbb”,“cc”y}; 2、二维数组数据输出 static char str|3|6={“aaa”,"“bbbb”,cccc”}; printf("%c”,stru1);元素,单字符* printf(“%s”,strl0) /*一维数组,字符串* 注:当输出的串无“0标志时,则继续取下一个字符,直到遇 到0结束。 七、举例 P1755.14(1)
六、二维字符数组 1、二维数组 由若干个一维数组组成。 如:static char str[3][6]={“aaaaa”, “bbbbb”,“ccccc”}; 2、二维数组数据输出 static char str[3][6]={“aaaaa”, “bbbbb”,“ccccc”}; printf(“%c”,str[1][1]); /*元素,单字符*/ printf(“%s”,str[0]); /*一维数组,字符串*/ 注:当输出的串无‘\0‘标志时,则继续取下一个字符,直到遇 到’\0’结束。 七、举例 P175_5.14(1)
include“ stdio.h” include“ strint. h” main void strlwr(chars[ l, int n); char str 81; gets(str); strlwr(str strlen(str) printf(“%sⅦm”,str); void strlwr(char l, n) int k for(k=1;k≤n;k++) h|k=ch|k]+32:
#include “stdio.h” #include “strint.h” main() { void strlwr(char s[ ], int n); char str[81]; gets(str); strlwr(str,strlen(str)); printf(“%s\n”,str); } void strlwr(char ch[ ], n) { int k; for ( k=1 ;k<n;k++) ch[k]=ch[k]+32; }
小结 字符串及字符串存储方法 2、字符数组的初始化 3、字符串的输入 4、字符串的输出 5、字符串函数 字符二维数组 实验准备
小结: 1、字符串及字符串存储方法 2、字符数组的初始化 3、字符串的输入 4、字符串的输出 5、字符串函数 6、字符二维数组 实验准备