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

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标准库字符串函数依赖结尾的空字符,使用时必 须小心 判断字符串长度比较耗时,必须沿字符串序列查找 空字符,复杂度随字符串长度线性增加
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 10 C程序调试.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 课程简介及编程基础(绳伟光).pdf
- 机械工业出版社:计算机科学丛书《计算机组成与设计:硬件、软件接口》电子教材(中文第4版).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Systems》A Programmer's Perspective(Randal E. Bryant、David R. O'Hallaron,THIRD EDITION).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Organization and Design》THE HARDWARE / SOFTWARE INTERFACE(DAVID A. PATTERSON JOHN L. HENNESSY,Fourth Edtion,彩色版).pdf
- 《中文信息学报》:中文组织机构名称与简称的识别.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲义)方波生成器项目报告书.doc
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第8讲 Windows应用程序设计.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第7讲 C++类(2/2).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第6讲 C++类(1/2).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第5讲 指针与引用.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第4讲 数组与结构.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第3讲 函数与结构化程序设计.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第2讲 C++程序的流程控制.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第1讲 C++语言概述及数据类型(何其昌).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(课件讲稿)总复习(共八讲).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)基于MFC的对话框程序.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)C++练习(答案).pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(学习资料)C++练习(题目).pdf
- 上海交通大学:《Computational Thinking and Approach》教学资源(课件讲稿)Something You Should Know.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 12 结构、联合与枚举.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 13 高级指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 14 内存检测、剖面分析.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 15 输入输出.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 C语言简介.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 03 C语言数据类型.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 05 C语言语句.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 06 C语言数组.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 07 函数.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 08 指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 09 C程序组织.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 算法设计与分析基础.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 Greedy and Dynamic Programming.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 Divide and Conquer.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 04 C语言运算符与表达式.pdf
- 《C程序与算法设计》课程教学资源(学习资料)快乐的Linux命令行.pdf
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)01 ROS系统安装.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)02 ROS基本元素实验(一).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)03 ROS基本元素实验(二).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)04 调试和可视化.doc