1 / 66

C 语言高级编程 (第四部分) 字符串

C 语言高级编程 (第四部分) 字符串. 北京大学 信息科学技术学院. 数组 的 存储方式. 内存. 数组 的 存储方式. shuzu [ 0 ]. 数组 包含的 一组变量 在 内存 中 是 连续存放 的. shuzu [ 1 ]. shuzu [ 2 ]. shuzu [ 3 ]. int shuzu [ 5 ];. shuzu [ 4 ]. 关于 数组名称 的说明. 内存. int main(){ int shuzu [5]; if( shuzu == &amp;( shuzu [ 0 ] ) ){ printf(&quot; True <br>&quot;);

derex
Download Presentation

C 语言高级编程 (第四部分) 字符串

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言高级编程(第四部分)字符串 北京大学信息科学技术学院

  2. 数组的存储方式

  3. 内存 数组的存储方式 shuzu[0] 数组包含的一组变量 在内存中是连续存放的 shuzu[1] shuzu[2] shuzu[3] int shuzu[5]; shuzu[4]

  4. 关于数组名称的说明

  5. 内存 • int main(){ • int shuzu[5]; • if(shuzu==&(shuzu[0])){ • printf("True\n"); • }else{ • printf("False\n"); • } • return 0; • } shuzu shuzu[0] shuzu[1] shuzu[2] shuzu[3] shuzu[4]

  6. 内存 shuzu shuzu[0] 数组名称是一个地址 shuzu[1] shuzu[2] 数组名称是 该数组所占内存空间的起始地 址,是数组第一个元素的地址。 shuzu[3] shuzu[4]

  7. 数组名与 指针变量 • 静态数组: • 数组名是一个指向该数组所占内存空间的地址。 • 动态数组: • 通过指针变量,指向一块自己申请的内存空间,这块空间也是一个数组。 • 静态数组和动态数组在内存中的本质是一样的,可以用指针变量来代表数组名: #include <stdio.h> #define N10 int main(){ inti; int distance[N]; for( i=0; i<N; i++){ scanf(“%d”, &distance[i]); } return 0; } #include <stdio.h> #define N10 int main(){ inti; int distance[N]; int *pint; pint = distance; for( i=0; i<N; i++){ scanf(“%d”, &pint[i]); } return 0; }

  8. 数组元素的赋值 声明后赋值 声明时赋值

  9. 内存 声明后赋值 shuzu[0] 随机值 int shuzu[5]; shuzu[1] 随机值 shuzu[2] 随机值 shuzu[3] 随机值 shuzu[4] 随机值

  10. 内存 声明后赋值 shuzu[0] 随机值 int shuzu[5]; shuzu[1] 随机值 int i; for(i = 0; i < 5; i++){ shuzu[i] = i; } shuzu[2] 随机值 shuzu[3] 随机值 shuzu[4] 随机值

  11. 内存 声明后赋值 shuzu[0] 0 int shuzu[5]; shuzu[1] 1 int i; for(i = 0; i < 5; i++){ shuzu[i] = i; } shuzu[2] 2 shuzu[3] 3 shuzu[4] 4

  12. 内存 声明时赋值 shuzu[0] 0 • int shuzu[5] = {0, 1, 2, 3, 4}; shuzu[1] 1 shuzu[2] 2 shuzu[3] 3 shuzu[4] 4

  13. 内存 声明时赋值 shuzu[0] 0 • int shuzu[5] = {0, 1}; shuzu[1] 1 当 数值数目小于数组变量数目时, 剩余的数组变量被赋值为0 shuzu[2] 0 shuzu[3] 0 shuzu[4] 这个规律 对float, double, char 类型的数组 也适用! 0

  14. 声明时赋值 • int shuzu[5] = {0, 1}; • int shuzu[5] = {0, 1,0,0,0};

  15. 字符串

  16. 回顾:字符型变量的赋值

  17. 如何给一个字符型变量赋予一个特定的值? • 基本方法:通过赋值语句 int main(){ char b, c, d; return0; } b = ‘x’; c = b; 可以把字符的ASCII编码值 赋给一个字符型变量 d = 120;

  18. ASCII 编码表 编码值为0的字符 是什么字符? 字符x的编码值是120

  19. 这个字符的 输出效果是什么 答: 一个特殊的字符 • int main(){ • char a; • a = 0; • printf("A%cB\n", a); • return 0; • } 编码值为0的字符 是什么字符?

  20. 编码值为0的字符 • int main(){ • char a; • a = 0; • …… • return 0; • } • int main(){ • char a; • a = ‘\0’; • …… • return 0; • }

  21. 什么是字符串

  22. 什么是字符串 • 字符串是 • 由一个或多个字符构成的序列 you are a student!

  23. 在C语言中,字符串是如何实现/存储的 在C语言中, 字符串被实现为一维字符数组 在C语言中, 字符串被存储在一维字符数组中

  24. 在C语言中,字符串是如何实现/存储的 在C语言中, 字符串以字符‘\0’作为结尾

  25. 如何声明一个字符串常量 用双引号把需要表达的字符串括起来 “you are a student!” 编译器负责 在末尾添加一个‘\0’字符

  26. 如何声明一个字符串变量 第一步: 确定想要存储的字符串的最大长度LEN 第二步: 声明一个长度为LEN+1 的一维字符数组 字符串以字符‘\0’作为结尾; 需要为该字符预留一个存储空间 WHY

  27. 字符串变量 一维字符数组

  28. 向控制台输出字符串常量

  29. 向控制台输出字符串常量 方法1: printf 函数 字符串常量 • int main(){ • printf(“u r a student”); • return 0; • }

  30. int main(){ • printf(“you are a stud\0ent”); • printf(“\n”); • return 0; • } 这个程序的输出效果是什么?

  31. 向控制台输出字符串常量 方法2: puts 函数 • int main(){ • puts(“u r a student”); • return 0; • } • int main(){ • printf(“u r a student\n”); • return 0; • }

  32. 字符串的长度 字符串中第一个‘\0’字符之前 的字符的个数 长度为18 “you are a student!” 长度为14 “you are a stud\0ent!”

  33. 向控制台输出字符串变量

  34. 向控制台输出字符串变量 方法1: printf 函数+%s修饰符 • int main(){ • char zfc[50]; • … … //给字符串变量zfc赋值 • printf(“%s”, zfc); • return 0; • }

  35. 向控制台输出字符串变量 方法2: puts 函数 • int main(){ • char zfc[50]; • … … //赋值 • puts(zfc); • return 0; • } • int main(){ • char zfc[50]; • … … //赋值 • printf(“%s\n”, zfc); • return 0; • }

  36. 字符串变量的赋值 声明时赋值 声明后赋值

  37. 声明时赋值之烦琐方式 • char zfc[LEN] = • {‘u’, ‘ ’, ‘r’, ‘ ’, ‘a’, ‘ ’, ‘s’, ‘t’, ‘u’, ‘d’, ‘e’, ‘n’, ‘t’, ‘\0’}; LEN必须大于13 请不要使用这种方式! … 0 1 2 3 4 5 6 7 8 9 10 11 12 13 LEN-1 … u r a s t u d e n t \0 \0

  38. 声明时赋值之简洁方式 • char zfc[LEN] = • {‘u’, ‘ ’, ‘r’, ‘ ’, ‘a’, ‘ ’, ‘s’, ‘t’, ‘u’, ‘d’, ‘e’, ‘n’, ‘t’, ‘\0’}; • char zfc[LEN] = “u r a student”; • char zfc[LEN]; • zfc = “u r a student”; … 0 1 2 3 4 5 6 7 8 9 10 11 12 13 LEN-1 … u r a s t u d e n t \0 \0

  39. 声明后赋值之从控制台输入 • 方法1: • scanf函数 + %s修饰符 • int main(){ • char zfc[50]; • scanf(“%s”, zfc); • printf(“%s\n”, zfc); • return 0; • } 缺点: 不能接收 包含空格的字符串

  40. 声明后赋值之从控制台输入 • 方法2:gets函数 • int main(){ • char zfc[50]; • gets(zfc); • printf(“%s\n”, zfc); • return 0; • }

  41. 声明后赋值之从控制台输入 • 方法1: • scanf函数 + %s修饰符 • 方法2:gets函数 请尽量使用方法1 除非字符串中含有空格

  42. 声明后赋值之从另一个字符串赋值 • 方法:“字符串复制”函数 • strcpy(目标字符串, 源字符串); 功能:把源字符串赋值给目标字符串 #include <string.h> 注意:调用时,要确保 目标字符串所在数组的长度 大于源字符串的长度

  43. 声明后赋值之从另一个字符串赋值 • int main(){ • char zfc_src[50], zfc_tgt[50]; • gets(zfc_src); • strcpy(zfc_tgt, zfc_src); • printf(“%s\n”, zfc_tgt); • return 0; • }

  44. 声明时赋值之指针方式 • char *zfc = “u r a student”;

  45. 字符串数组 由字符串变量构成的数组

  46. 字符串数组 字符串变量 一维字符数组 字符串数组 二维字符数组

  47. 如何声明字符串数组 第一步: 确定数组中存储的字符串的最大长度LEN 第二步: 确定数组包含的字符串变量的最大数量N 第三步: 声明一个 行数为N,列数为LEN+1 的二维字符数组 char zfcsz[N][LEN+1];

  48. 如何使用字符串数组 • int main(){ • char zfc_src[50], zfc_tgt[50]; • gets(zfc_src); • strcpy(zfc_tgt, zfc_src); • printf(“%s\n”, zfc_tgt); • return 0; • } • int main(){ • char zfc[2][50]; • gets(zfc[0]); • strcpy(zfc[1], zfc[0]); • printf(“%s\n”, zfc[1]); • return 0; • }

  49. 关于字符串的常用函数 strcpy(目标字符串,源字符串) strlen(字符串) strcmp(字符串A,源字符串B) strcat(目标字符串,源字符串) strlwr(字符串) strupr(字符串) 使用这些函数前,需要#include <string.h>

  50. “字符串复制”函数 • strcpy(目标字符串, 源字符串); 功能:把源字符串赋值给目标字符串 • int main(){ • char zfc_src[50], zfc_tgt[50]; • gets(zfc_src); • strcpy(zfc_tgt, zfc_src); • printf(“%s\n”, zfc_tgt); • return 0; • }

More Related