
8.1字符串的存储与引用 ★字符串的存储 冬字符串及其结束标志 ●无字符串变量,用字符数组处理字符串 ●字符串结束标志:0》 例 “hello”共5个字符,在内存占6个字节 字符串长度5 \0 104 101108 108 111 0 内存存放字符ASCⅡ码
字符串的存储 ❖字符串及其结束标志 ⚫无字符串变量,用字符数组处理字符串 ⚫字符串结束标志:‘\0’ 例 “hello”共5个字符,在内存占6个字节 字符串长度5 h e l l o \0 104 101 108 108 111 0 内存存放字符ASCII码 8.1字符串的存储与引用

字符数组和字符串 ★字符数组 例 char c[10],ch[3][4]; 》定义 》字符数组的初始化 ●逐个字符赋值 ●用字符串常量 》字符数组的引用 用字符串常量 有问题≤ 例char ch[6]={Hello'}; char ch[6]=Hello”, char ch=“Hello”, H 1 0 0 ch[0]ch[1]ch[2] ch[3] ch[4]ch[5]
字符数组和字符串 字符数组 ❖定义 ❖字符数组的初始化 ⚫逐个字符赋值 ⚫用字符串常量 ❖字符数组的引用 例 char c[10], ch[3][4]; 例 char ch[5]={‘H’,’e’,’l’,’l’,’o’}; ch[0] H e l l o 逐个字符赋值 ch[1] ch[2] ch[3] ch[4] 有问题! 例 char ch[5]={‘H’,’e’,’l’,’l’,’o’}; ch[0] H e l l o 逐个字符赋值 ch[1] ch[2] ch[3] ch[4] 例 char ch[5]={‘B’,’o’,’y’}; ch[0] B o y \0 \0 逐个字符赋值 ch[1] ch[2] ch[3] ch[4] 例 char ch[5]=“Boy”; ch[0] B o y \0 \0 用字符串常量 ch[1] ch[2] ch[3] ch[4] 例 char ch[6]={“Hello”}; char ch[6]=“Hello”; char ch[]=“Hello”; 用字符串常量 ch[0] H e l l o ch[1] ch[2] ch[3] ch[4] \0 ch[5]

二维字符数组初始化 二维字符数组初始化 Lbor diomoond51-(D1 例char fruit[][7]={“Apple”,”Orange?”, Grape”",Pear,Peach}; d d fruit[O] A p p 0 0 d fruit[1] 0 a n g c 0 d fruit[2] G r a p e 0 \0 P r 0 d fruit[3] e a 0 0 fruit[4] P a h 0 0
例 char diamond[][5]={{'.', '.','*'},{'.','*','.','*'}, {'*', '.', '.', '.' ,'*'},{'.','*', '.','*'},{'.', '.','*'}}; 二维字符数组初始化 . . * \0 \0 . * . * \0 * . . . * . * . * \0 . . * \0 \0 diamond[0] diamond[1] diamond[2] diamond[3] diamond[4] 例 char fruit[][7]={“Apple”,”Orange”, ”Grape”,”Pear”,”Peach”}; 二维字符数组初始化 fruit[0] fruit[1] fruit[2] fruit[3] fruit[4] A p p l e \0 \0 O r a n g e \0 G r a p e \0 \0 P e a r \0 \0 \0 P e a c h \0 \0

例输出一个字符串 0 mainO) {char c[l0]={"T,'a,'m,','a,'',b',o',y; 2 a int i; 3 m for(i=0;i<10;i++) 4 printf"%c",c[i]); 5 a printf("\n"); 6 7 b 8 0 9
例 输出一个字符串 main() { char c[10]={'I',' ','a','m',' ','a',' ','b','o','y'}; int i; for(i=0;i<10;i++) printf("%c",c[i]); printf("\n"); } I a m a b o y 0 1 2 3 4 5 6 7 8 9

8.2字符串的输入输出 使用标准输入输出函数 ●逐个字苻I/O:%c ●整个字符串I/O: %S 用字符数组名,不要加& 例 用%c 输入串长度<数组维数 mainO 遇空格或回车结束 { char str[5]; 自动加0 int i; 例 用%s str); main() char str[5]; scanf(%s”,str); 5tr[]) printf"%s",str); 用字符数组名 遇0结束
使用标准输入输出函数 ⚫逐个字符I/O: %c ⚫整个字符串I/O: %s 例 用%c main() { char str[5]; int i; for(i=0;i<5;i++) scanf(“%c”, &str[i]); for(i=0;i<5;i++) printf(“%c”, str[i]); } 例 用%s main() { char str[5]; scanf(“%s”, str); printf(“%s”, str); } 用字符数组名,不要加& 输入串长度<数组维数 遇空格或回车结束 自动加‘\0’ 用字符数组名, 遇‘\0’结束 8.2字符串的输入输出

例 main( { char a[]={H,'e,1,1',o}; printf%s”,a); 0 结果:Hello#=* 用“%s”输出时,遇0 结束 例 main( {char a[]=“Hello”; printf%s”,a); 结果:Hello
例 main( ) { char a[5]={’H’,’e’,’l’,’l’,’o’}; printf(“%s”,a); } 例 main( ) { char a[ ]=“Hello”; printf(“%s”,a); } 结果:Hello#-=* h e l l o 0 1 2 3 4 结果:Hello 用“%s”输出时,遇‘\0’ 结束

例 main() char a={h','e',1',0',l,'o',八0'}; printf("%s",a); 输出:hel 数组中有多个0?时, 遇第一个结束
main() { char a[]={'h','e','l','\0','l','o','\0'}; printf("%s",a); } 例 输出:hel h e l \0 l o \0 数组中有多个‘\0’时, 遇第一个结束

运行情况: 例字符串输入举例 输入:How are you? 输出:a=How mainO b-are {char a[15],b[5],c[5]; c=you? scanf("%s%s%s",a,b,c), 输入:How are you? 输出:a=How printf("a-%s nb=%s\nc-%s\n",a,b, scanf("%s",a), printf("a-%s n",a); scanf中%s输入时,遇空格 或回车结束 运行情况: 输入:How are you? a r e 0 y ou?\0
例 字符串输入举例 H o w \0 a r e \0 y o u ? \0 main() { char a[15],b[5],c[5]; scanf("%s%s%s",a,b,c); printf("a=%s\nb=%s\nc=%s\n",a,b,c); scanf("%s",a); printf("a=%s\n",a); } 运行情况: 输入:How are you? 输出:a=How b=are c=you? 输入:How are you? 输出:a=How scanf中%s输入时,遇空格 或回车结束 运行情况: 输入:How are you?

8.3字符串处理函数 包含在头文件 stdio.h或 string.h ◆字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以0结束 例 #include ◆字符串输入函数gts main() 格式:gets(字符数组) 功能:从键盘输入一以 { char string[80]; 并自动加0” printf("Input a string:"); 说明:输入串长度应小 gets(string); puts(string); 输入:How are you? 输出:How are you?
8.3字符串处理函数 包含在头文件 stdio.h 或 string.h ◆字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以‘\0’结束 ◆字符串输入函数gets 格式:gets(字符数组) 功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加‘\0’ 说明:输入串长度应小于字符数组维数 例 #include main( ) { char string[80]; printf(“Input a string:”); gets(string); puts(string); } 输入: How are you? 输出: How are you ?

◆字符串连接函数strcat 格式:strcat((字符数组l,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:①字符数组1必须足够大 ②连接前,两串均以0’结束;连接后,串1的0’ 取消 新串最后加0' 字符串拷贝函数strcpy 格式:strcpy(字符数组l,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:①字符数组I必须足够大 ②拷贝时\0' ③不能使用赋值语 char str1[20],str2[20]; strl={Hello”}; () str2=str1; ()
◆字符串连接函数strcat 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’ ◆字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 拷贝时‘\0’一同拷贝 不能使用赋值语句为一个字符数组赋值 例 char str1[20],str2[20]; str1={“Hello!”}; () str2=str1; ()