程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章

上传人:E**** 文档编号:89364171 上传时间:2019-05-24 格式:PPT 页数:57 大小:419KB
返回 下载 相关 举报
程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章_第1页
第1页 / 共57页
程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章_第2页
第2页 / 共57页
程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章_第3页
第3页 / 共57页
程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章_第4页
第4页 / 共57页
程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章》由会员分享,可在线阅读,更多相关《程序设计基础 教学课件 ppt 作者 C语言 7-10章 第8章(57页珍藏版)》请在金锄头文库上搜索。

1、第8章 字 符 串,8.1 字符串 8.2 函数间字符串的传递 习题,8.1 字 符 串 8.1.1 字符串常量 1定义 字符串常量是由一对双引号括起来的字符序列。例如,“China“,“How are you“,“$abc“ , “123569“,“string“ 等都是合法的字符串常量。 2说明 (1) 双引号仅仅起到字符串常量的边界符作用,并不是字符串常量的一部分。,(2) 注意区分字符串常量和字符常量的区别。例如,“c“ 和 c 是根本不同的数据,前者是字符串常量,后者是字符常量。它们之间主要有以下区别: 字符常量由单引号括起来,字符串常量由双引号括起来; 字符常量只能是单个字符,字符

2、串常量则可以含一个或多个字符; 可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量; 字符常量占一个字节的内存空间。,8.1.2 字符串的存储 C语言规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。同时C语言也规定:以字符 0 作为字符串的结束标志。字符 0 是一个ASCII码为0的字符。从ASCII代码表中可以看到,ASCII码为0的字符是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符,即它什么也不做。用它作为字符串结束标志不会产生附加的操作或增加有效字符,它只是一个供辨别的标志。 因此,字符串常量在内存中所占的字节数

3、等于字符串中有效字符所占的字节数(即有效字符的个数)再加1个字节。增加的一个字节存放的是字符串结束的标志0。,例如:字符串 “Welcome“ 在内存中所占的字节为: 注意区分字符串常量和字符常量的区别。例如 “s“ 和 s ,字符串常量 “s“ 和字符常量 s虽然都只有一个字符,但在内存中的情况是不同的。,字符串 “s“ 在内存中占2个字节,可表示为: 字符 s 在内存中占一个字节,可表示为: 注意:在写字符串时不必加 0 ,0 字符是系统自动加上的。,8.1.3 字符串的表示 1字符数组 C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。语言允许用字符串的方式对字符数组作初

4、始化,即可以用字符数组存放一个字符串。 例如: char c = W, e, l, c, o, m, e; 可写为: char c =“Welcome“; 也可以省略花括号,直接写为: char c =“Welcome“;,注意:用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的字节用于存放字符串结束标志 0。因此,以下两个字符数组的初始化等价,其字符数组的长度都是8。 char c =“Welcome“; char c = W, e, l, c, o, m, e,0; 字符数组完整的应用程序举例如下:,/*源程序8-1*/ #include “stdio.h“ main( ) char

5、string =“Welcome to China!“; printf(“%sn“,string); 程序运行结果如下:,2字符指针 也可以不定义字符数组,而定义一个字符指针,用字符指针指向字符串中第一个字符的地址。,/*源程序8-2*/ #include “stdio.h“ main( ) char *string=“Welcome to China!“; printf(“%sn“,string); 程序运行结果如下:,3字符数组和字符指针变量的区别 (1) 字符数组有若干个元素,每个元素中存放一个字符;而字符指针变量中存放的是字符串中第一个字符的地址。 (2) 赋值方式的不同。 例如:字符

6、指针的赋值语句: char *string=“Welcome“; 它等价于: char *string; string=“Welcome“; 因为可以将字符串的首地址存放在指针变量中。,而字符数组的赋值语句: char string =“Welcome“; 它不等价于: char string ; string =“Welcome“; 因为string表示字符数组的首地址,是常量,不能在赋值号的左端进行修改,不能将字符串的首地址赋值给数组名。,(3) 字符数组在编译时为其分配存储单元,有确定的地址;字符指针分配的内存单元只能存放一个字符变量的地址,若没有赋值,则没有确定的指向。 char st

7、ring20; scanf(“%s“,string); 以上语句是正确的。 char *p; scanf(“%s“,p); 以上语句是错误的,因为字符指针没有指向任何存储空间, 不能输入字符串。应改成: char string20 , *p; p=string; scanf(“%s“,p);,(4) 指针变量的值可以改变,是变量;数组名是常量,它的值是不能改变的。 /*源程序8-3*/ #include “stdio.h“ main( ) char *string=“Welcome to China!“; string=string+11; printf(“%sn“,string); ,程序运

8、行结果如下:,将程序改为 /*源程序8-4*/ #include “stdio.h“ main( ) char string=“Welcome to China!“; string=string+11; printf(“%sn“,string); 以上程序是错误的,原因在于数组名是常量,它的值是不能改变的。,8.2 函数间字符串的传递 8.2.1 单个字符串的传递 函数的参数不仅可以是整型、实型、字符型等数据,还可以是数组和指针类型。将字符串从一个函数传递到另一个函数,可以用字符数组名或指向字符串的指针作参数,实际上传递的是字符串的起始地址。在被调用的函数中如果改变了字符串的内容,则在主调函数

9、中可以得到改变了的字符串。,/*源程序8-5*/ #include “stdio.h“ main( ) void copy_str(char *from, char *to); /函数的声明 char a50=“I am a teacher.“; char *b=“Welcome to China!“; printf(“a=%snb=%sn“,a,b); copy_str(b,a); printf(“a=%snb=%sn“,a,b);, void copy_str(char *from, char *to) int i=0; while(fromi!=0) *(to+i)=fromi; i+;

10、 toi=0; ,程序运行结果如下:,8.2.2 多个字符串的传递 在一个数组中,如果每个元素都是指针类型数据,则称该数组为指针数组。也就是说,指针数组中的每一个元素都相当于一个指针变量。指针数组的一般定义形式为: 类型名 *数组名数组长度; 例如: char *str3; 表示str是一个指针数组,该数组有3个元素,每个元素值都是一个指针变量,指向字符型变量。应特别注意指针数组和指向一维数组的指针变量的区别。例如:,char (*str)3; 表示str是一个指向一维数组的指针变量,该一维数组的长度为3,数组的元素类型为字符型。 指针数组的一个典型的应用是用它来指向若干个字符串,使字符串的处

11、理更加方便灵活。同时也可以将指针数组作为函数的参数,此时传递的将是此指针数组的起始地址。可以通过此种方法来处理多个字符串。,/*源程序8-6*/ #include “stdio.h“ main( ) void print(char *string,int n); /函数的声明 char *str3; str0=“Welcome to China!“; str1=“Follow me“; str2=“I am a teacher.“; print(str,3);, void print(char *string,int n) int i; for(i=0;in;i+) printf(“%sn“,

12、stringi); 程序运行结果如下:,8.2.3 main函数的参数 指针数组的一个重要应用是作为main函数的形参。实际上,main函数可以有参数,这个参数可以认为是main函数的形式参数。语言规定main函数的参数只能有两个,习惯上将这两个参数写为argc和argv。因此,带参数的main函数头可写为: main(int argc,char *argv),语言规定:main函数的第一个形参argc必须是整型变量, main函数的第二个形参argv必须是指向字符串的指针数组。由于main函数不能被其他函数调用,因此不可能在程序内部取得实际值。那么,在什么时候、在何处把实参值赋予main函数

13、的形参呢? 实际上,main函数的参数值是从操作系统命令行中获得的。也就是在一个命令行中包括命令名和需要传给main函数的参数。命令行的一般形式为: 可执行文件名 参数1 参数2 参数n,其中可执行文件名(即命令名)和各参数之间用空格分隔。应该特别注意的是main函数的两个形参和命令行中的参数在位置上的对应关系。因为main的形参只有两个,而命令行中的参数个数原则上未加限制。第一个形参argc表示了命令行中参数的个数(注意:可执行文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的;第二个形参argv是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符

14、串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。,例如有如下命令行: cmdname BASIC foxpro FORTRAN C 在此命令行中,cmdname为可执行文件名,BASIC、foxpro、FORTRAN和C为参数。则对应于此命令行的main函数的形参argc为5,形参argv的对应关系如图8-1所示。,图8-1 argv的对应关系,/*源程序8-7*/ #include “stdio.h“ main(int argc,char *argv) int i; for(i=0;iargc;i+) printf(“%sn“,argvi); ,假设此程序保存在D:

15、,文件名为m.c;经过编译、连接之后将会得到可执行文件m.exe。则该程序的执行过程和运行结果如下:,8.2.4 字符串处理函数 C语言提供了大量的字符串处理函数,使用这些字符串处理函数可简化编程。在使用输入/输出的字符串函数时,应包含头文件 “stdio.h“;在使用其他字符串处理函数时,应包含头文件 “string.h“。以下介绍几种最常用的字符串函数。 1字符串输出函数puts 格式:puts(字符数组) 功能:将字符数组中的字符串(以 0 作为结束标志)输出到终端,即在屏幕上显示该字符串。,/*源程序8-8*/ #include “stdio.h“ main( ) char str=“BASICndBASEnC“; puts(str); ,程序运行结果如下: 从程序中可以看出,puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号