计算机二级C语言.ppt
字字 符符 串串一、字符串的定义与存储一、字符串的定义与存储 C C语言中没有字符串变量,字符串是存放在一个字符型语言中没有字符串变量,字符串是存放在一个字符型数组中,字符数组中的一个元素存放一个字符。数组中,字符数组中的一个元素存放一个字符。如:如:char str10;char str10;c0=s;c1=p;c2=e;c4=p;cc0=s;c1=p;c2=e;c4=p;c5=0;5=0;c0 c1 c2 c3 c4 c5 c0 c1 c2 c3 c4 c5spels00000二、字符串的初始化二、字符串的初始化1 1、逐个字符赋给数组中各元素、逐个字符赋给数组中各元素如:如:char char str10=str10=s,t,r,i,n,gs,t,r,i,n,g,!,!;注意:花括弧中字符的个数至少比数组长度少注意:花括弧中字符的个数至少比数组长度少1 1个,个,C C语言规定了一个语言规定了一个“字符串结束标志字符串结束标志”,以字符,以字符00代代表。因此,表。因此,C C程序往往依靠检测程序往往依靠检测00来判断字符串是否来判断字符串是否结束结束而不是根据数组长度来决定字符串长度。而不是根据数组长度来决定字符串长度。s s t t r r i i n n g g!00 00002 2、对一个字符数组指定一个字符串初值、对一个字符数组指定一个字符串初值如:如:char str10=“string!”;char str10=“string!”;系统在字符串的末尾自动加系统在字符串的末尾自动加00。所以,字符数。所以,字符数组的长度应足够大。组的长度应足够大。如:如:char c13=“Computer&C”;char c13=“Computer&C”;s t r i n g!000四种表示形式分析:四种表示形式分析:形式一:形式一:char*p=“char*p=“splessples”;”;形式二:形式二:char*p;char*p;p=“p=“splessples”;”;形式三:形式三:char str10;char str10;strstr=“=“splessples”;”;形式四:形式四:char char strstr=“=“splessples”,*”,*pstrpstr=“=“splessples”;”;三、指针与字符串三、指针与字符串四、字符数组的输入与输出四、字符数组的输入与输出1 1、printfprintf函数输出字符串。函数输出字符串。说明:用说明:用“%s”%s”格式符,意思是输出字符串。格式符,意思是输出字符串。char char strstr=“He0llo”;=“He0llo”;printf(“%s”,strprintf(“%s”,str););注意:注意:%s%s要求要求strstr为输出字符串的首地址,直到为输出字符串的首地址,直到00时,结束输出。分析下面的语句输出的结果。时,结束输出。分析下面的语句输出的结果。char char strstr=“He0llo”;=“He0llo”;printf(“%s”,strprintf(“%s”,str););printf(“%s”,str+5);printf(“%s”,str+5);2 2、putsputs函数输出字符串函数输出字符串格式:格式:putsputs(字符串首地址)字符串首地址)作用:将一个字符串(以作用:将一个字符串(以0 0 结束)输出到终端。结束)输出到终端。如:如:char char strstr=“china=“chinanbeijingnbeijing”;”;puts(strputs(str););输出结果:输出结果:chinachina beijingbeijing3 3、scanfscanf函数输入字符串函数输入字符串例如:例如:char str20;char str20;scanf(“%s”,strscanf(“%s”,str););用户输入:用户输入:spelsspels!注意:如果注意:如果scanfscanf函数输入多个字符串,则以空格分隔。函数输入多个字符串,则以空格分隔。例如:例如:char str20;char str20;scanf(“%s”,strscanf(“%s”,str););输入以下输入以下1212个字符:个字符:How are you?How are you?输入后输入后strstr数组的内容为:数组的内容为:HowHow4.gets4.gets函数输入字符串函数输入字符串格式:格式:getsgets(字符串首地址)字符串首地址)作用:从终端输入一个字符串(包括空格符),送到指作用:从终端输入一个字符串(包括空格符),送到指定的起始地址处开始存放。定的起始地址处开始存放。例如:例如:char str120;char str120;gets(str1);gets(str1);用户输入:用户输入:hi hi spelsspels!则输入的则输入的1010个字符包括空格全部送入个字符包括空格全部送入str1str1字符数组中。字符数组中。五、字符串数组五、字符串数组1 1、二维数组存放字符串数组、二维数组存放字符串数组char name420=“char name420=“I”,”am”,”a”,”teacherI”,”am”,”a”,”teacher”;”;2 2、指针数组处理字符串数组、指针数组处理字符串数组char*char*pnamepname=“=“I”,”am”,”a”,”teacherI”,”am”,”a”,”teacher”;”;相当于:相当于:pname0pname0指向指向 “I”;I”;pname1pname1指向指向 ”am”;am”;pname2pname2指向指向 “a”;a”;pname3pname3指向指向 ”teacher”;teacher”;六、字符串处理函数1 1、strcpystrcpy(字符串字符串1 1,字符串,字符串2 2)作用:它是字符串拷贝函数,它可以将字符串作用:它是字符串拷贝函数,它可以将字符串2 2拷贝到拷贝到字符串字符串1 1中去。字符串分别表示首地址。中去。字符串分别表示首地址。如:如:char str110,str2=“china”;char str110,str2=“china”;strcpy(str1,str2);strcpy(str1,str2);char*char*strcopy(charstrcopy(char*d,chard,char*s)*s)char*p=d;char*p=d;while(*s!=0)while(*s!=0)*p=*s;*p=*s;p+;p+;s+;s+;*p=0;*p=0;return d;return d;2 2.strcmpstrcmp(s1s1,s2s2)作用:比较字符串作用:比较字符串s1s1和和s2s2的大小。的大小。例如:例如:strcmp(s1,s2);strcmp(s1,s2);strcmp(“Chinastrcmp(“China”,“Korea”);”,“Korea”);strcmp(s1,“Beijing”);strcmp(s1,“Beijing”);比较的结果由函数值带回:比较的结果由函数值带回:如果如果s1=s2s1=s2,函数值为,函数值为0 0。如果如果s1s2s1s2,函数值为一正整数(大于,函数值为一正整数(大于0 0)。)。如果如果s1s2s1s2,函数值为一负整数(小于,函数值为一负整数(小于0 0)。)。说明:字符串比较方法是逐个比较字符的说明:字符串比较方法是逐个比较字符的ASCIIASCII码值。码值。intint strcompare(charstrcompare(char*s1,char*s2)*s1,char*s2)while(*s1=*s2&*s1)while(*s1=*s2&*s1)s1+;s1+;s2+;s2+;return(*s1-*s2);return(*s1-*s2);3 3.strlenstrlen(字符串首地址)(字符串首地址)作用:它是返回字符串长度的函数。函数的值为字符作用:它是返回字符串长度的函数。函数的值为字符串中实际长度,不包括串中实际长度,不包括00在内。如:在内。如:char str10=“china”;char str10=“china”;printf(“%d”,strlen(strprintf(“%d”,strlen(str););输出结果为:输出结果为:5 5intint strlength(charstrlength(char*strstr)intint i=0;i=0;while(striwhile(stri!=0)!=0)i+;i+;return i;return i;4 4.strcatstrcat(字符串(字符串1 1,字符串,字符串2 2)作用:连接两个字符数组中的字符串,把字符串作用:连接两个字符数组中的字符串,把字符串2 2接到接到字符串字符串1 1的后面,结果放在字符串的后面,结果放在字符串1 1中。中。如:如:char str115=“china”;char str115=“china”;char str2=“char str2=“beijingbeijing”;”;printf(“%s”,strcat(str1,str2);printf(“%s”,strcat(str1,str2);输出:输出:china china beijingbeijing void void strcatt(charstrcatt(char*d,chard,char*s)*s)intint lenlen;lenlen=strlen(dstrlen(d););d+=d+=lenlen;while(*s!=0)while(*s!=0)*d=*s;*d=*s;d+;d+;s+;s+;*d=0;*d=0;