


数组 二 模块4 共34页第2页 1字符与字符串2字符数组3字符串处理函数4二维字符数组5应用实例 字符数据处理 共34页第3页 符号常量 以指定符号代表其后的 一串字符 格式 define标识符常量 1字符与字符串 一 字符型数据 可以是任意类型常量 字符常量 以 括起来的单个字符 开头的字符序列 例 a A n 表示换行 r 表示回车 字符串常量 用双引号括起来的字符序列 例 Ch 123 等 长度不限 末尾加 0 字符变量 存放字符常量的变量 用char说明 共34页第4页 1字符与字符串 续 二 字符串 串长 字符串中所包含的字符数 串结束标记 字符 0 称为串结束标记 C中的串以 0 结束 字符串在数组中的存储格式 字符串可以存在一个一维数组中 字符串中的一个字符占用字符数组中一个字节 具有数组特性 字符串实际占有单元的数量等于字符串长度 1 例如 要定义一个存放字符串 CHINA 的字符数组c 应定义为 charc 6 数组c在内存中实际存放情况为 共34页第5页 串长 5 三 字符数据的输入输出 库函数 getchar putchar ch 从键盘上读一个字符 1字符与字符串 续 使用getchar 时 可以输入任何字符 允许用户根据自己的要求进行控制与处理 串尾 0要自己编程加入 其中 ENTER 接受为 r 回车 格式化输入输出函数 scanf printf c 共34页第6页 格式 数据类型数组名 维数说明 例 chara 4 b 10 charc 3 4 表示a数组可以存放4个字符 c数组可以存放12个字符 例 c 3 4 可存放三个字符串 每个字符串最多存放4个字符 一维字符型数组作为一个字符串变量使用 二维字符型数组相当于一个字符串数组 每行存放一个字符串 2字符数组 续 一 一维字符数组的定义 二 字符数组的用途 共34页第7页 8 2字符数组 三 一维字符数组的初始化 用字符串对字符数组初始化 如 charch 6 CHINA charch 6 CHINA 省略 charch CHINA 省略长度值 字符数组初始化 用单个字符对字符数组初始化 如 charch 6 C H I N A 0 2字符数组 续 共34页第8页 2字符数组 续 四 一维字符数组的引用 如 chara 10 CHINA2000 b 3 123 printf c n a 3 printf s n a 对于字符数组 不仅可以引用它的数组元素 也可以引用整个数组 共34页第9页 2字符数组 续 staticchara 3 for i 0 i 3 i scanf c 输入数据顺序 dos输出数据顺序 dos 四 字符数组的输入与输出 单字符输入输出 用格式符 c控制 共34页第10页 staticchara 7 scanf s a 2字符数组 续 字符数组名指明数组首地址 字符串输入输出 用格式符 s控制 0 不输出 只能输入不包括空格 t和 n的字符串自动在串尾加 0 printf s n a 共34页第11页 五 字符串在数组中的存储格式 使用字符 0 作为字符串的结束标记 就使得C语言对字符串的长度没有具体的限制 但字符串的最大长度不能超过存储它的字符数组的长度 否则会造成数组越界错误 2字符数组 完 0 是在字符串存入字符数组是由系统自动添加的 并不是字符串本身的一部分 在计算串长的时候并不包括 0 共34页第12页 3字符串处理函数 一 字符串输入输出函数 gets 字符数组名 由终端输入字符串到字符数组 以换行结束返回字符数组的首地址 puts 字符数组名 将以 0结束的字符串输出到终端返回的函数值是字符数组的首地址 共34页第13页 3字符串处理函数 续 格式 strlen x 功能 返回x字符串中字符的个数 不包括字符串结束符 x是字符串首地址 其形式可以是字符数组或字符指针 也可以是字符常量 二 求字符串长度的函数 共34页第14页 3字符串处理函数 续 格式 strcat 字符数组1 字符数组2 功能 连接两个字符数组中的字符串 将串2接在串1后 结果存放在字符数组1中 返回的函数值是字符数组1的首地址 字符数组1的长度不可缺省 足够大 三 字符串连接函数 四 字符串复制函数 格式 strcpy 字符数组1 字符数组2 功能 将串2复制到串1数组中 共34页第15页 程序 includevoidmain charstr1 100 str2 100 inti j printf Enterstring1 gets str1 printf Enterstring2 gets str2 for i 0 str1 i 0 i 确定 0位置 for j 0 str1 i str2 j 0 i j printf Outputstring1 s n str1 例8字符串连接 将串str2连接到串str1之后 根据字符串中 0的位置进行字符串连接 关键 要用str2的第1个字符覆盖str1的串结束标记 0 a b c d e f g 0 str2 str1 算法 1 查找str1的串结束标记 02 从str1的 0开始 将str2复制到str1 3字符串处理函数 续 共34页第16页 例9字符串复制 将字符串str1拷贝到串str2中 没有必要复制整个数组 根据字符串中 0的位置 只对 0前面的字符进行复制 includevoidmain charstr1 100 str2 100 inti printf Enterstring1 gets str1 输入字符串str1 for i 0 str2 i str1 i 0 i 复制 printf Outputstring2 s n str2 a b f g 0 str1 str2 3字符串处理函数 续 共34页第17页 3字符串处理函数 续 五 字符串比较函数 格式 strcmp 字符数组1 字符数组2 功能 比较串1和串2 返回结果为 0 相等 正数 串1大 负数 串2大 abc 与 abc 相等 abcd 与 abck abcd 小 abc 与 ab abc 大 比较原则 按ASCII码比较 共34页第18页 例10字符串比较 确定字符串大小的基本规则 按照串中对应位置字符的ASCII码值的大小确定大小 例如 abc abadef 因为字符c a include stdio h voidmain charstr1 100 str2 100 inti printf Enterstring1 gets str1 printf Enterstring2 gets str2 for i 0 str1 i str2 i 3字符串处理函数 续 共34页第19页 8 3字符串处理函数 六 大小写字母的转换 1格式 strlwr x 功能 把地址为x的字符串中所有大写字母转换成小写字母 x可以是字符数组或字符指针 也可以是字符串常量 调用形式 strlwr x 2格式 strupr x 功能 把地址为x的字符串中所有小写字母转换成大写字母 x可以是字符数组或字符指针 也可以是字符串常量 调用形式 strupr x 3字符串处理函数 完 共34页第20页 8 2字符数组 一 二维字符数组的定义 如 chara 2 5 b 3 7 与二维数值数组定义相同 但数据类型为char 4二维字符数组 共34页第21页 8 2字符数组 二 二维字符数组的初始化 可以在定义的同时初始化 如 chara 3 8 str1 str2 string3 charb 6 s1 s2 str3 二维字符数组初始化 4二维字符数组 续 二维字符数组初始化在内存的存储 共34页第22页 8 2字符数组 三 二维字符数组的引用 如 1 for i 0 i 3 i printf s n a i 2 for i 0 i 3 i printf c n a i i 3 for i 0 i 3 i printf s n 对于二维字符数组 每行可以看做一个字符数组 数组名a i 可以用a i 引用i行的字符串 也可以用a i j 引用i行j列的字符 4二维字符数组 完 输出 1 str1 2 s 3 tr1str2tr2strinf3ring3 共34页第23页 include includevoidmain charstring 100 t inti j n gets string n strlen string for i 0 istring j 1 t string j string j string j 1 string j 1 t puts string 4应用实例 例11输入一行字符 将其中的每个字符从小到大排列后输出 共34页第24页 例12输入五个单词 请将它们按从小到大的顺序排列后输出 include includevoidmain charstr 5 20 t 20 inti j n printf Enterstring n for i 0 i0 strcpy t str j strcpy str j str j 1 strcpy str j 1 t printf Result n for i 0 i 5 i puts str i 4应用实例 续 共34页第25页 例13任意输入一个3位整数 取其各位数字的和 再取这个和被7除的余数 输出余数对应的星期 英文单词 如 输入123 1 2 3 7 6 则输出saturday 对3位整数n 拆分其百 十和个位的方法 百位 i n 100 十位 j n 10 10 个位 k n 10 4应用实例 续 共34页第26页 例13 include stdio h main charweek 7 9 Sunday Monday Tuesday Wednesday Thursday Friday Saturday inti j k a n do printf Pleaseinputanumber n scanf d 4应用实例 续 共34页第27页 include stdio h include string h voidmain charstr 80 c inti j n printf Enterstring gets str n strlen str for i 0 j n 1 i j i j c str i str i str j str j c printf Result puts str 4应用实例 例14输入一行字符串 将其反序后再输出 共34页第28页 include stdio h include string h voidmain charstr1 80 str2 80 str 80 inti j n printf Enterstring1 gets str1 printf Enterstring2 gets str2 n 0 for i 0 j 0 str1 i 0 4应用实例 例15输入两个已经按从小到大顺序排列好的字符串 编写一个合并两个字符串的函数 使合并后的字符串 仍然是从小到大排列 共34页第29页 include includevoidmain intlength charline 100 gets line length 0 while line length 0 length printf Stringlength d n length 例16求字符串的长度根据字符串中 0的位置来计算字符串长度 若 数组中第i个元素为 0 则 串长 i length 7 4应用实例 。