1、第九章第九章字符串回顾回顾 2-1根据变量的作用域可以将变量划分为:局部变量和全局变量根据变量的存储类型(决定生存期)将变量划分为:自动变量、寄存器变量、静态变量、外部变量静态局部变量的生存期为整个源程序,但其作用域为定义该变量的函数静态全局变量的生存期为整个源程序,其作用域为定义该变量的源文件回顾回顾 2-2采用传值调用方式时,在被调用函数中改变形参的值,只是改变其副本值,而不会影响调用函数中实参值采用传址调用方式时,传递的是变量的地址值,这样在被调函数中,对形参的操作实际上操作的是实参本身数组作为函数传递时,实际采用传址方式目标目标理解字符串常量理解字符数组和字符串的异同使用字符串输入/输
2、出函数使用字符串处理函数理解指针与字符串的关系使用字符指针数组使用字符串作为函数参数本章结构本章结构字符数组和字符串字字 符符 串串字符串作函数参数字符串处理函数字符串的输入输出函数指针和字符串字符指针数组字符串简介字符串简介char a=W;char b=a;char c=n;char d=g;char e=L;char f=i;如何让程序存储我的姓名?Wang Lichar name15=W,a,n,g,L,i;用若干个字符用字符数组用字符串字符串常量字符串常量字符串常量是双引号括起的任意字符序列Hello WorldWangPingPlease enter your full name:
3、Hello Accp字符串常量中可以包含转义序列HelloWorld0字符串结束符字符串与字符数组字符串与字符数组在语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串字符数组和字符串的区别是:字符串的末尾有一个空字符 0字符串可按如下方式声明并初始化:char name15=W,a,n,g,L,i,0;char name15=WangLi;char password=12345678;手工加入一个空字符系统将自动加入一个空字符省略数组大小,系统自动计算,大小为后面的字符总数加1,最后一个元素存入一个空字符。字符串字符串I/0函数函数3-1char name10;scanf(%s,n
4、ame);printf(%s,name);格式描述串中使用转换字符串“%s”Wang LiWang0使用 scanf 时,不能输入空格Wang字符串字符串I/0函数函数3-2char name10;gets(name);puts(name);WangLi0Wang LiWang Li从键盘上读入一个完整的行,存入字符数组name。并用空字符0取代行尾的换行符n。把字符数组中的字符串输出到显示器。使用 gets函数允许输入空格字符串字符串I/0函数函数3-3puts 函数完全可以由 printf 函数取代。当需要按一定格式输出时,通常使用 printf 函数。printf(n 雇员姓名是:);p
5、uts(name);printf(n 雇员所属部门是:);puts(dept);printf(n 雇员姓名是:%s,name);printf(n 雇员所属部门是:%sn,dept);使用puts函数输出字符串使用printf函数输出字符串字符串示例字符串示例#include void main()char line30;int i,count=0;printf(n 请输入一行字符:n);gets(line);i=0;while(linei!=0)if(linei=)count+;i+;printf(“n 其中的空格总数为%d n,count);C is a programming langua
6、ge在循环执行时,扫描整个数组以统计出空格 的数量,直到遇到字符 0。每次循环执行时,都会更新计数器 i 和 count。其中的空格总数为 4字符串处理函数字符串处理函数 5-1q 与字符串有关的内置函数在头文件string.h中定义q 要使用标准库字符串处理函数,程序前应该包含:#include string.hstrlenstrcpystrcmpstrcat字符串处理函数字符串处理函数 5-2语法 strlen(s);描述计算字符串s中字符的个数,并将字符的个数作为函数的返回值。在计算字符个数时不计表示字符串结束的空字符0。strlen#include#include void main(
7、)char arr=Beijing;int len1,len2;len1=strlen(arr);len2=strlen(Shanghai);printf(n string=%s length=%d,arr,len1);printf(n string=%s length=%d n,Shanghai,len2);string=Beijing length=7 string=Shanghai length=8字符串处理函数字符串处理函数 5-3语法 strcpy(dest,src)描述其中,dest是目标字符串,src是源字符串。相当于把字符数组src中的字符串拷贝到字符数组dest中。结束标志0
8、也一同拷贝。src可以是一个字符串常量。字符数组dest应足够大,以保证字符串复制不越界。strcpy#include#include void main()char source=We change lives;char target20;strcpy(target,source);printf(n 源字符串=%s,source);printf(n 目标字符串=%sn,target);源字符串=We change lives 目标字符串=We change lives字符串处理函数字符串处理函数 5-4语法strcmp(str1,str2)描述按照ASCII码顺序比较字符串str1和str2
9、的大小,比较的结果由函数返回。在两个字符串str1和str2相同时返回0;字符串str1大于字符串str2时返回一个正值,否则就返回负值。strcmp#include#include void main()char username15,pwd15;printf(n 请输入用户名:);gets(username);printf(n 请输入密码:);gets(pwd);if(strcmp(username,John)=0)&(strcmp(pwd,123456)=0)printf(n 您已成功登录 n);elseprintf(n 用户名和/或密码无效 n);请输入用户名:john 请输入密码:1
10、23456 用户名和/或密码无效 请输入用户名:John 请输入密码:123456 您已成功登录字符串处理函数字符串处理函数 5-5语法 strcat(dest,src)描述把字符串 src中的字符串连接到字符串 dest中字符串的后面。本函数返回值是字符数组dest的首地址。连接后字符串的总长度将是字符串 src 的长度加上字符串 dest的长度。目标字符串dest的大小应足够存储最终的字符串。strcat#include#includevoid main()char source_string=is very good;char target_string30=ACCP 4.0;strca
11、t(target_string,source_string);printf(n 源字符串=%s,source_string);printf(n 目标字符串=%sn,target_string);源字符串=is very good 目标字符串=ACCP 4.0 is very good指向字符串的指针指向字符串的指针在C语言中,可以将字符指针指向字符串被指向的字符串可以是一个常量字符串,也可以是一个存储着字符串的字符数组char*ptr=C Language;CLanguage0ptrchar*ps=We change lives;int n=10;ps=ps+n;printf(%sn,ps);
12、Wechanglives0ps lives指向字符串的指针指向字符串的指针char uname30=wahaha yiyiyaya;char*p;int count;count=0;for(p=uname;*p!=0;p+)if(*p=a)count+;Wahahayiyiyaya0psunamecount0 5循环字符指针数组字符指针数组字符指针数组:一个数组中的各个元素都是字符指针char*names =Apple,Pear,Peach,Banana;Apple0Pear0Banana0Peach0EE05EE20EE44EE87names各字符串的首地址字符指针数组示例字符指针数组示例v
13、oid main()char*names=Apple,Banana,Pineapple,Peach,Strawberry,Grapes;char*temp;printf(“n%s%s,names2,names3);temp=names2;names2=names3;names3=temp;printf(n%s%s,names2,names3);printf(n);Apple0Banana0Peach0Pineapple0namesStrawberry0Grapes0temp Pineapple Peach Peach Pineapple55485562558355A855B355C955835
14、5A85583字符串作为函数参数字符串作为函数参数void mystrcpy(char dest,char src)int i=0;while(srci!=0)desti=srci;i+;desti=0;用户定义版字符串拷贝函数int mystrlen(char*s)int n=0;while(*s!=0)+s;+n;return n;用户定义版求字符串长度函数总结总结字符串与字符数组的区别是字符串的末尾有一个空字符0以标识字符串结束用scanf()语句读入字符串时不允许输入中存在空格gets()和 puts()函数分别用于字符串的输入和输出在 string.h 中定义了很多字符串处理函数函数,比较常用的有:strcpy()、strcat()、strcmp()和 strlen()假如程序里需要一组字符串,一种常用的做法就是用一个字符指针数组表示它们字符串可以作为参数,函数传递机制同数组作为参数,为引用方式