《《字符与字符串g》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《字符与字符串g》PPT课件.ppt(18页珍藏版)》请在金锄头文库上搜索。
1、第第 8 章章 字符与字符串字符与字符串 指针与字符串指针与字符串n字符串表示形式字符串表示形式n用字符数组实现用字符数组实现例例 main( ) char string=“I love China!”; printf(“%sn”,string); printf(“%sn”,string+7); IloveChistring0string1string2string3string4string5string6string7string8string9stringstring10string11string12string13n!a0n用字符指针实现用字符指针实现例例 main( ) char
2、*string=“I love China!”; printf(“%sn”,string); string+=7; while(*string) putchar(string0); string+; IloveChistringn!a0字符指针初始化字符指针初始化: :把字符串首地址赋给把字符串首地址赋给stringstring char *string; string=“I love China!”;string*string!=0n字符指针变量与字符数组字符指针变量与字符数组char *cp; 与与 char str20;nstr由若干元素组成,每个元素放一个字符;而由若干元素组成,每个元
3、素放一个字符;而cp中存放中存放字符串首地址字符串首地址n char str20; str=“I love China!”; ( ) char *cp; cp=“I love China!”; ( )nstr是地址是地址常量常量;cp是地址变量是地址变量ncp接受键入字符串时接受键入字符串时,必须必须先开辟存储空间先开辟存储空间例例 char str10; scanf(“%s”,str); ( )而而 char *cp; scanf(“%s”, cp); ( )改为改为: char *cp,str10; cp=str; scanf(“%s”,cp); ( )字符串与数组关系字符串与数组关系n字
4、符串用一维字符数组存放字符串用一维字符数组存放n字符数组具有一维数组的所有特点字符数组具有一维数组的所有特点n数组名是指向数组首地址的地址常量数组名是指向数组首地址的地址常量n数组元素的引用方法可用指针法和下标法数组元素的引用方法可用指针法和下标法n数组名作函数参数是地址传递等数组名作函数参数是地址传递等n区别区别n存储格式:字符串结束标志存储格式:字符串结束标志n赋值方式与初始化赋值方式与初始化n输入输出方式:输入输出方式:%s %cchar str=“Hello!”; ( )char str=“Hello!”; ( )char str=H,e,l,l,o,!; ( )char *cp=“H
5、ello”; ( )int a=1,2,3,4,5; ( )int *p=1,2,3,4,5; ( )char str10,*cp;int a10,*p;str=“Hello”; ( )cp=“Hello!”; ( )a=1,2,3,4,5; ( )p=1,2,3,4,5; ( )scanf(“%s”,str);printf(“%s”,str);gets(str);puts(str);n字符指针:字符指针:char *p;p=“I am a student.”;n定义字符数组时,在编译时为数组分配内存。定义字符数组时,在编译时为数组分配内存。而定义一个指向字符的指针变量,则只分配一而定义一个指
6、向字符的指针变量,则只分配一个存放指针变量的内存,指针变量个存放指针变量的内存,指针变量“必须初始必须初始化后才能使用化后才能使用”。char str10;scanf(“%s”,str);char *p;scanf(“%s”,p);char *p; p=(char*)malloc(20);scanf(“%s”,p); free(p); stdlib.h1 .字符串拷贝函数字符串拷贝函数strcpy() a) char *strcpy(char *s1, char *s2); 功能:功能: 将将s2s2所指向的字符串复制到所指向的字符串复制到s1s1所指所指向的字符数组中,然后返回向的字符数组中
7、,然后返回s1s1的地址值。的地址值。eg. char *strcpy( *s1, *s2) char *s1, *s2; char *p,*q; p=s1;q=s2; while (*p+=*q+); return s1; 2. 字符串连接函数字符串连接函数strcat() a) char *strcat(char *s1, char *s2); 功能:功能: 将将s2s2字符串添加到字符串添加到s1s1字符串的后字符串的后面,然后返回面,然后返回s1s1的地址值。的地址值。eg. char *strcat( *s1, *s2) char *s1, *s2; char *p=s1; whil
8、e (*p!=0) p+; while (*p+=*s2+); return s1; 3. 字符串比较函数字符串比较函数strcmp() a) int strcmp(char *s1, char *s2); 功能:比较两个字符串大小功能:比较两个字符串大小. .返回值为返回值为0,0,则则串串1=1=串串2.2.返回值为正数返回值为正数, ,则串则串11串串2.2.返回值为负返回值为负数数, ,则串则串11串串2.2.eg. strcmp(char *s1, char *s2) while (*s1=*s2) if(*s1=0) return 0; s1+; s2+; return (*s1-
9、*s2); (例例)下列程序的输出结果是下列程序的输出结果是 main( ) char *p1,*p2,str50=xyz; p1=abcd; p2=ABCD; strcpy(str+2,strcat(p1+2,p2+1); printf(%s,str); A)xyabcAB B)abcABz C)ABabcz D)xycdBCD函数库为函数库为ctype.hint isalpha(int ch) 若若ch是字母是字母(A-Z,a-z)返回非返回非0值值,否则返回否则返回0int isalnum(int ch) 若若ch是字母是字母(A-Z,a-z)或数字或数字(0-9) 返回非返回非0值值,
10、否则返回否则返回0int isascii(int ch) 若若ch是字符是字符(ASCII码中的码中的0-127)返回非返回非0值值,否则返回否则返回0int iscntrl(int ch) 若若ch是作废字符是作废字符(0x7F)或普通控制字符或普通控制字符(0x00-0x1F) 返回非返回非0值值,否则返回否则返回0int isdigit(int ch) 若若ch是数字是数字(0-9)返回非返回非0值值,否则返回否则返回0int isgraph(int ch) 若若ch是可打印字符是可打印字符(不含空格不含空格)(0x21-0x7E)返回非返回非0值值,否则返否则返回回0int islow
11、er(int ch) 若若ch是小写字母是小写字母(a-z)返回非返回非0值值,否则返回否则返回0int isprint(int ch) 若若ch是可打印字符是可打印字符(含空格含空格)(0x20-0x7E)返回非返回非0值值,否则返回否则返回0int ispunct(int ch) 若若ch是标点字符是标点字符(0x00-0x1F)返回非返回非0值值,否则返回否则返回0int isspace(int ch) 若若ch是空格是空格( ),水平制表符水平制表符(t),回车符回车符(r), 走纸换行走纸换行(f),垂直制表符垂直制表符(v),换行符换行符(n) 返回非返回非0值值,否则返回否则返回
12、0int isupper(int ch) 若若ch是大写字母是大写字母(A-Z)返回非返回非0值值,否则返回否则返回0int isxdigit(int ch) 若若ch是是16进制数进制数(0-9,A-F,a-f)返回非返回非0值值, 否则返回否则返回0int tolower(int ch) 若若ch是大写字母是大写字母(A-Z)返回相应的小写字母返回相应的小写字母(a-z)int toupper(int ch) 若若ch是小写字母是小写字母(a-z)返回相应的大写字母返回相应的大写字母(A-Z)函数库为函数库为stdlib.hdouble atof(char *nptr) 将字符串将字符串n
13、ptr转换成浮点数并返回这个浮点数转换成浮点数并返回这个浮点数int atoi(char *nptr) 将字符串将字符串nptr转换成整数并返回这个整数转换成整数并返回这个整数long atol(char *nptr) 将字符串将字符串nptr转换成长整数并返回这个整数转换成长整数并返回这个整数char *ultoa(unsigned long value,char *string,int radix) 将无符号整型数将无符号整型数value转换成字符串并返回该字符串转换成字符串并返回该字符串,radix为转换时所用基数为转换时所用基数char *ltoa(long value,char *s
14、tring,int radix) 将长整型数将长整型数value转换成字符串并返回该字符串转换成字符串并返回该字符串,radix为转换时所用基数为转换时所用基数char *itoa(int value,char *string,int radix) 将整数将整数value转换成字符串存入转换成字符串存入string,radix为转换时所用基数为转换时所用基数int system(char *command) 将将MSDOS命令命令command传递给传递给DOS执行执行str字符串操作函数字符串操作函数char stpcpy(char *dest,const char *src) 将字符串将字
15、符串src复制到复制到destchar strcat(char *dest,const char *src) 将字符串将字符串src添加到添加到dest末尾末尾char strchr(const char *s,int c) 检索并返回字符检索并返回字符c在字符串在字符串s中第一次出现的位置中第一次出现的位置int strcmp(const char *s1,const char *s2) 比较字符串比较字符串s1与与s2的大小的大小,并返回并返回s1-s2char strcpy(char *dest,const char *src) 将字符串将字符串src复制到复制到des例:例: 建立给定
16、范围的子目录建立给定范围的子目录#include stdio.h#include stdlib.h#include string.hmain()char s110,s210,s20; int beg,end,i; puts(begin:); gets(s1); puts(end:); gets(s2); beg=atol(s1); end=atol(s2); for(i=beg;i=end;i+) strcpy(s,md ); ltoa(i,s1,10); strcat(s,s1); system(s); /*编程题 请编一个函数int fun(* char ss),它的功能是:把ss字 符串
17、中的字符按逆序存放。例如:若输入字符串为ABCDE FG,则逆置后的字符串为GFEDCBA。请勿改动主函数 main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。*/ #include #include #include int fun(char p) void main() char s80; printf(nPlease enter a string:); gets(s); fun(s); printf(nThe new string is:); puts(s); getch(); int fun(char p) int n,i,j; char c; n=strlen(p); for(i=n-1,j=0;ij;i-,j+) c=pi; pi=pj; pj=c; return n; 用递归法将字符串反向输出用递归法将字符串反向输出#include void fun(char *s) char t;if(*s)t=*s+;fun(s);putchar(t);void main() char a=12345678;fun(a);作业作业(p283)8.6 8.24 8.34