第10章:字符串剖析

上传人:今*** 文档编号:106879562 上传时间:2019-10-16 格式:PPT 页数:37 大小:653.50KB
返回 下载 相关 举报
第10章:字符串剖析_第1页
第1页 / 共37页
第10章:字符串剖析_第2页
第2页 / 共37页
第10章:字符串剖析_第3页
第3页 / 共37页
第10章:字符串剖析_第4页
第4页 / 共37页
第10章:字符串剖析_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第10章:字符串剖析》由会员分享,可在线阅读,更多相关《第10章:字符串剖析(37页珍藏版)》请在金锄头文库上搜索。

1、第10章 字符串 p-141,10.1 用一维字符数组存放字符串 1、C语言对字符串的约定 在C语言中,字符串是借助于字符型一维数组来存放, 并规定以符0作为“字符串结束标志”。由第六章已知: 0是一个转义字符,称为“空值”。它的ASCII代码值为0。 0作为标志占用存储空间,但不计入串的实际长度。 char s100;,2、C语言中表示字符串常量的约定 虽然C语言中没有字符串数据类型,但却允许使用“字符 常量”。在表示字符串常量时,不需要人为在其末尾加入0。 例如:字符串常量“Hello!” 不必写成 “Hello!0”, C编译程序将自动完成这一工作,在末尾添加字符0。,3、C语言中字符串

2、常量给出的是地址值: 每一个字符串常量都分别占用内存中一串连续的存储空间,这些连续的 存储空间实际上就是字符型一维组。这些数组虽然没有名字,但C编译 系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址。 不同的字符串具有不同的起始地址。也就是说:在C语言中,字符串常 量被隐含处理成一个以0结尾的无名字符型一维数组。 例: p=“string”; printf(“%d”,”hello”);,char *p;,4、字符数组与字符串的区别: p-142,?,字符数组是由若干个字符 组成 ,但末尾不一定有0。 字符串末尾必 须有0。,10.1.1 通过赋初值的方式给一维字符数组赋字符串 p-

3、142,1、char str7= s,t,r,i,n,g,0; 2、char str7= s,t,r,i,n,g ; 3、char str6= s,t,r,i,n,g ; 4、char str8=“Hello”; 5、char str8=“Hello”; 6、char str =“string”; 7、char str5=“Hello”; 8、int a5=1,3,5,7,9;,main( ) char str8; str8=“Hello”; ,10.1.2 在C程序执行过程中给一维字符数组赋字符串 p-143,1.不可以用赋值语句给字符数组整体赋一串字符。 本章的开始曾提到:当作字符串变量使

4、用的字符数 组,不能由赋值语句直接赋字符串常量。 char mark10; mark =“C Program“; /*赋值不合法*/,2. 给数组元素逐个赋字符值,最后人为加入串结束标志 利用我们目前学过的知识,在程序过程中,可以通过逐个给数组元素赋值方式,达到给一维字符数组赋字符串的目的。 main( ) char mark10; mark 0=C; mark 1= ; mark 2=P; mark4=r; mark9= 0 ; ,10.2 使指针指向一个字符串 p-144,10.2.1通过赋初值的方式使指针指向一个字符串 可以在定义指针变量的同时,将存放字符串的存储单元起始地址 赋给指针变

5、量。例如: char *ps1=“ from one ”; 10.2.2通过赋值运算使指针指向一个字符串 如果已经定义了一个字符型指针变量,可以通过赋值运算将某个 字符串的起始地址赋给它, 从而使其指向一个具体的字符串。 char *ps1; ps1=“ from one “;,10.2.3用字符数组作为字符串和用指针指向一个字符串的区别,若有以下定义: char mark =“A PROGRAM “; char *pmark=“A PROGRAM “; 虽然字符串的内容相同,但它们占有不同的存储空间 mark pmark - “A PROGRAM”,10.3字符串的输入和输出 p-145,1

6、0.3.1 输入和输出字符串时的必要条件 输入项和输出项都必须是地址。,int x; scanf(“%d”,10.3.2 用格式说明符%s进行整串输入和输出,1.在scanf函数中使用格式说明%s可以实现字符串 整体输入。函数调用形式如下: char str100; scanf(“%s“, str);,2.printf函数中使用格式说明%s可以实现字符串的整体输出, 函数调用形式如下: printf (“%s“, str); 例:main( ) char str100=“hello”; printf(“%s”,str); 此处str_adr是地址值。调用printf函数时,将从这一地址开始,依

7、 次输出存储单元中的字符,直到遇0为止。输出结束后不自动换行。,10.3.3调用gets、puts函数,从终端进行字符串的输入和输出 p-146,1. gets函数的调用形式如下:gets(str_adr) 2. puts函数的调用形式如下:puts (str_adr) 调用 puts函数时,将从这一地址开始,依次输出存储单元中 的字符,遇到0即结束输出,并自动输出一个换行符。 main( ) char str100; gets(str); puts(str); puts(str); ,main( ) char str100; gets(str); printf(“%s”,str); prin

8、tf(“%s”,str); ,10.4 字符串数组(用二维数组存放字符串)p-146,char ca35=“ A“, “BB“, “CCC“; 此定义也可写成: char ca 5=“A”, “BB”,“CCC”; char *p3=“abc”, “EFGH”,”1234”;,10.5 用于字符串处理的函数 p-148,1.字符串复制(拷贝)函数strcpy。调用形式如下: strcpy(s1,s2) 此函数用来把s2所指字符串(源)的内容复制到s1所 指存储空间(目的)中,函数返回s1的值,即目的串 的首地址。注意:为保证复制的合法性,s1必须指 向一个足够容纳s2串的存储空间。,调用字符串

9、复制(拷贝)函数strcpy,#include “string.h” main( ) char str120=“Hello”, str220=“AB“; strcpy ( str1 , str2 ) ; puts ( str1 ) ; ,编写字符串复制(拷贝)函数strcpy,viod scopy(char *s ,char *t) int i=0; while ( (si=ti)!=0) i+; main( ) char s20=“Hello”, t20 =“AB“; scopy (s , t ) ; puts ( s ) ; ,2.字符串连接函数strcat p-148,strcat函数的

10、调用形式如下: strcat(s1,s2) 该函数将s2所指字符的内容连接到s1所指的字符串后面, 并自动覆盖s1串末尾的0;函数返回s1的地址值。 注意:s1所指字符串应有足够的空间容纳两串合并后的内容。,调用字符串连接函数strcat,#include “string.h” main( ) char str120=“Hello”, str220=“AB“; strcat ( str1 , str2 ) ; puts ( str1 ) ; ,编写字符串连接函数strcat:,viod scat(char *s ,char *t) int i=0,j=0; while ( (si!=0) i+

11、; while(si=tj)!=0) i+; j+; main( ) char s 20=“Hello”, t20=“AB“; scat ( s , t ) ; puts ( s ) ; ,3、求字符串长度函数strlen,strlen函数的调用形式如下: strlen(s) 此函数计算出以s为起始地址的字符串的长度,并作为函数值返回。这一长度不包括串尾的结 束标志0。,调用求字符串长度函数strlen,#include “string.h” main( ) char str20=“Hello”;int n; n=strlen(str); ; printf(“n=%d”,n); ,编写求字符串

12、长度函数strlen,slen(char *str) int i=0; while(stri!=0) i+; return i; main( ) char str20=“Hello”;int n; n=slen(str); ; printf(“n=%d”,n); ,4、字符串比较函数strcmp,strcmp函数的调用形式如下: strcmp( s1 , s2 ) 该函数用来比较s1和s2所指定字符串的大小。若串s1串s2,函数值大于0(正数);若串s1=串s2,函数值等于0;若串s1串s2,函数值小于0(负数)。 字符串比较的方法是:依次对s1和s2中对应位置上的字符两两进行比较,当出现第一

13、对不相同的字符时,即由这两个字符决定所在串的大小(字符大小的依据是其ASCII码值)。,调用字符串比较函数strcmp,main() char str110 , str210;int n; gets(str1); gets(str2); n=strcmp(str1,str2); if ( n 0 ) printf(“str1str2n“) ; else if ( n 0 ) printf(“str1 str2n“); else printf(“str1=str2n“); ,编写字符串比较函数strcmp,scmp( char *s,char *t ) int i=0 ; while ( si=

14、ti if ( n 0 ) printf(“stn“) ; else if ( n 0 ) printf(“s tn“); else printf(“s=tn“); ,课后习题 p-152,10.1 以下能正确进行字符串赋值、赋初值的语句组是 A) char s5= a,e,i,o, u; B) char *s; s=“ good!“; C) char s5=“good!“; D) char s5; s=“good!“ 10.2 以下程序段的输出结果是 A)68 B)0 C)字符D的地址 D)不确定的值 char str =“ABCD“, *p=str; printf(“%dn“, *(p+4

15、) ); 10.3 以下程序段的输出结果是 A) 11 B) 10 C) 9 D) 8 printf(“%dn“, strlen(“ATSn 0121“);,习题10. 4 p-152,10.4 当运行以下程序时输入OPEN T H E DOOR =A ) *c-= A a; return *c; main( ) char s81, *p=s; gets (s); while(*p) *p=fun (p); putchar (*p); p+; putchar (n); ,习题10. 5 p-152,10.5以下程序段的输出结果是 A ) GFEDCBA B) AGADAGA C) AGAAGAG D) GAGGAGA #include “stdio.h“ #include “string.h“ void fun(char

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号