中国高校课件下载中心 》 教学资源 》 大学文库

上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 11 字符串

文档信息
资源类别:文库
文档格式:PDF
文档页数:57
文件大小:1.59MB
团购合买:点击进入团购
内容简介
 字符串  字符串函数
刷新页面文档预览

lecture11一字符串 绳伟光 上海交通大学微纳电子学系 2017年04月07日

lecture 11 —— 字符串 绳伟光 上海交通大学微纳电子学系 2017年04月07日

内容 ■字符串 ■字符串函数 8 2

 字符串  字符串函数 内容 2

字符串(String简介 字符串包括字符串常量(string constants,or literals in C standard)和字符串变量(string variables) 字符串:Strings are arrays of characters in which a special character(the null character)marks the end ■C标准库另提供了一系列操作字符串的函数 3

3 字符串(String)简介  字符串包括字符串常量(string constants, or literals in C standard)和字符串变量(string variables)  字符串:Strings are arrays of characters in which a special character(the null character)marks the end  C标准库另提供了一系列操作字符串的函数

字符串字面量(String Literals) 字符串字面量是一系列括在双引号内的字母,可表示 有意义或无意义的句子 "When you come to a fork in the road,take it." ■字符串字面量中可以包含转义序列,就像在printf和 scanf的格式串中那样 ■ 包含转义序列字符串示例: "Candy\nls dandy\nBut liquor\nls quicker.\n --Ogden Nash\n" 实际打印出来效果如下: Candy Is dandy But liquor Is quicker. --Ogden Nash

4 字符串字面量(String Literals)  字符串字面量是一系列括在双引号内的字母,可表示 有意义或无意义的句子 "When you come to a fork in the road, take it."  字符串字面量中可以包含转义序列,就像在printf和 scanf的格式串中那样  包含转义序列字符串示例: "Candy\nIs dandy\nBut liquor\nIs quicker.\n --Ogden Nash\n" 实际打印出来效果如下: Candy Is dandy But liquor Is quicker. --Ogden Nash

字符串字面量续行 1当字符串字面量分布在多行,可以用反斜杠来续行: printf("When you come to a fork in the road,take it.\ --Yogi Berra"); 反斜杠八更一般的用途是连接多行程序为一行 ■ 字符串字面量续行更好的办法:将两个字符串放置在 一起,编译器会自动进行拼接形成一个字符串 printf("When you come to a fork in the road,take it. "--Yogi Berra"); 5

5 字符串字面量续行  当字符串字面量分布在多行,可以用反斜杠\来续行: printf("When you come to a fork in the road,take it. \ --Yogi Berra");  反斜杠\更一般的用途是连接多行程序为一行  字符串字面量续行更好的办法:将两个字符串放置在 一起,编译器会自动进行拼接形成一个字符串 printf("When you come to a fork in the road,take it. " "--Yogi Berra");

字符串字面量在内存中的存储 在c中,长度为n的字符串字面量占据n+1的空 间,多出来的1用于存储字符串结尾的八0' ■结尾的空字符八0'是一个所有bt都是0的字符, 可以直接用整数0代替 ■字符串"abc"在内存中如下: a 0 ■即使是空字符串""也要占据1个字符的空间 \0

6 字符串字面量在内存中的存储  在C中,长度为n的字符串字面量占据n+1的空 间,多出来的1用于存储字符串结尾的'\0'  结尾的空字符'\0'是一个所有bit都是0的字符, 可以直接用整数0代替  字符串"abc"在内存中如下:  即使是空字符串" "也要占据1个字符的空间

字符串字面量的数据类型 由于字符串字面量以数组的形式存储,因此具 有字符指针的数据类型:char* ■ 如下printfi调用将字符串"abc"作为参数传递, 实际上传递的是指向字母a的char*指针: printf("abc"); 可在需要char*指针的地方应用字符串字面量 char *p; p "abc";/now p points to 'a' int *q) q 1;/now q points to address 1

7 字符串字面量的数据类型  由于字符串字面量以数组的形式存储,因此具 有字符指针的数据类型:char *  如下printf调用将字符串"abc"作为参数传递, 实际上传递的是指向字母a的char*指针: printf("abc");  可在需要char*指针的地方应用字符串字面量 char *p; p = "abc"; // now p points to 'a' int *q; q = 1; // now q points to address 1

字符串字面量的操作 ■字符串字面量支持下标操作: char ch; ch "abc"[1];/now ch ='b' ■转换0到15的数字到16进制字符的函数: char digit_to_hex_char(int digit) { return "0123456789ABCDEF"[digit]; )

8 字符串字面量的操作  字符串字面量支持下标操作:  转换0到15的数字到16进制字符的函数: char ch; ch = "abc"[1]; // now ch == 'b' char digit_to_hex_char(int digit) { return "0123456789ABCDEF"[digit]; }

字符串字面量其它特性 字符串字面量具有常量属性,因此直接或间接 对其进行修改会导致未定义行为: char *p "abc"; *p='d'; *米米 WRONG *** ■包含单一字符的字符串和char类型数据不同 "a"is represented by a pointer a'is represented by an integer printf("\n"); printf('\n'); /**WRONG 米米* 9

9 字符串字面量其它特性  字符串字面量具有常量属性,因此直接或间接 对其进行修改会导致未定义行为:  包含单一字符的字符串和char类型数据不同 "a" is represented by a pointer 'a' is represented by an integer char *p = "abc"; *p = 'd'; /*** WRONG ***/ printf("\n"); printf('\n'); /*** WRONG ***/

字符串变量(String Variables) 任何一维数组都可以用来储存字符串,但字符 串最后必须以null character结尾 ■上述方式的缺陷 必难以判定一个字符数组是否确实是字符串 C标准库字符串函数依赖结尾的空字符,使用时必 须小心 判断字符串长度比较耗时,必须沿字符串序列查找 空字符,复杂度随字符串长度线性增加 10

10 字符串变量(String Variables)  任何一维数组都可以用来储存字符串,但字符 串最后必须以null character结尾  上述方式的缺陷 难以判定一个字符数组是否确实是字符串 C标准库字符串函数依赖结尾的空字符,使用时必 须小心 判断字符串长度比较耗时,必须沿字符串序列查找 空字符,复杂度随字符串长度线性增加

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档