




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1010章章 字符串字符串 p-14110.1 用一维字符数组存放字符串用一维字符数组存放字符串1 1、C C语言对字符串的约定语言对字符串的约定 在在C语言中,字符串是借助于语言中,字符串是借助于字符型一维数组字符型一维数组来存放,来存放,并规定以符并规定以符0作为作为“字符串结束标志字符串结束标志”。由第六章已知:。由第六章已知:0是一个转义字符,称为是一个转义字符,称为“空值空值”。它的。它的ASCII代码值为代码值为0。0作为标志占用存储空间,但不计入串的实际长度。作为标志占用存储空间,但不计入串的实际长度。char s100;2 2、C C语言中表示字符串常量的约定语言中表示字符
2、串常量的约定虽然虽然C语言中语言中没有字符串数据类型没有字符串数据类型,但却允许使用,但却允许使用“字符字符常量常量”。在表示字符串常量时,不需要人为在其末尾加入。在表示字符串常量时,不需要人为在其末尾加入0。例如:字符串常量例如:字符串常量“Hello!” 不必写成不必写成 “Hello!0”,C编译程序将自动完成这一工作,在末尾添加字符编译程序将自动完成这一工作,在末尾添加字符0。3 3、C C语言中字符串常量给出的是地址值语言中字符串常量给出的是地址值:每一个字符串常量都分别占用内存中一串连续的存储空间,这些连续的每一个字符串常量都分别占用内存中一串连续的存储空间,这些连续的存储空间实际
3、上就是字符型一维组。这些数组虽然没有名字,但存储空间实际上就是字符型一维组。这些数组虽然没有名字,但C编译编译系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址。系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址。不同的字符串具有不同的起始地址。也就是说:在不同的字符串具有不同的起始地址。也就是说:在C语言中,字符串常语言中,字符串常量被隐含处理成一个以量被隐含处理成一个以0结尾的无名字符型一维数组。结尾的无名字符型一维数组。例:例: p=“string”; printf(“%d”,”hello”);char *p;4 4、字符数组与字符串的区别字符数组与字符串的区别: :
4、 p-142? 字符数组是由若干个字符 组成 ,但末尾不一定有0。 字符串末尾必 须有0。10.1.1 通过赋初值的方式给一维字符数组赋字符串通过赋初值的方式给一维字符数组赋字符串 p-1421、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=“He
5、llo”;10.1.2 在在C C程序执行过程中给一维字符数组赋字符串程序执行过程中给一维字符数组赋字符串 p-1431.不可以用赋值语句给字符数组整体赋一串字符不可以用赋值语句给字符数组整体赋一串字符。本章的开始曾提到:当作字符串变量使用的字符数本章的开始曾提到:当作字符串变量使用的字符数组,不能由赋值语句直接赋字符串常量。组,不能由赋值语句直接赋字符串常量。 char mark10; mark =C Program; /*赋值不合法赋值不合法*/2. 给数组元素逐个赋字符值,最后人为加入串结束标志给数组元素逐个赋字符值,最后人为加入串结束标志 利用我们目前学过的知识,在程序过程中,可以通过
6、逐个给数利用我们目前学过的知识,在程序过程中,可以通过逐个给数组元素赋值方式,达到给一维字符数组赋字符串的目的。组元素赋值方式,达到给一维字符数组赋字符串的目的。 main( ) char mark10; mark 0=C; mark 1= ; mark 2=P; mark4=r; mark9= 0 ; 10.2 使指针指向一个字符串使指针指向一个字符串 p-14410.2.1通过赋初值的方式使指针指向一个字符串通过赋初值的方式使指针指向一个字符串可以在定义指针变量的同时,将存放字符串的存储单元起始地址可以在定义指针变量的同时,将存放字符串的存储单元起始地址赋给指针变量。例如赋给指针变量。例如
7、:char *ps1=“ from one ”;10.2.2通过赋值运算使指针指向一个字符串通过赋值运算使指针指向一个字符串如果已经定义了一个字符型指针变量,可以通过赋值运算将某个如果已经定义了一个字符型指针变量,可以通过赋值运算将某个字符串的起始地址赋给它,字符串的起始地址赋给它, 从而使其指向一个具体的字符串从而使其指向一个具体的字符串。char *ps1;ps1=“ from one ; 10.2.3用字符数组作为字符串和用指针指向一个字符串的区别用字符数组作为字符串和用指针指向一个字符串的区别若有以下定义若有以下定义:char mark =A PROGRAM ; char *pmark
8、=A PROGRAM ;虽然字符串的内容相同,但它们占有不同的存储空间虽然字符串的内容相同,但它们占有不同的存储空间 markpmark - “A PROGRAM”APROGRAM010.3字符串的输入和输出字符串的输入和输出 p-14510.3.1 输入和输出字符串时的必要条件输入和输出字符串时的必要条件输入项和输出项都必须是地址。输入项和输出项都必须是地址。int x;scanf(“%d”,&x”);printf(“%d”,x);10.3.2 用格式说明符用格式说明符%s进行整串输入和输出进行整串输入和输出1.在在scanf函数中使用格式说明函数中使用格式说明%s可以实现字符串可以
9、实现字符串 整体输入。函数调用形式如下:整体输入。函数调用形式如下: char str100; scanf(%s, str);2.printf函数中使用格式说明函数中使用格式说明%s%s可以实现字符串的整体输出,可以实现字符串的整体输出,函数调用形式如下:函数调用形式如下: printf (%s, str);例:例:main( ) char str100=“hello”; printf(“%s”,str); 此处此处str_adr是地址值。调用是地址值。调用printf函数时,将从这一地址开始,依函数时,将从这一地址开始,依次输出存储单元中的字符,直到遇次输出存储单元中的字符,直到遇0为止。输
10、出结束后不自动换行。为止。输出结束后不自动换行。10.3.3调用调用gets、puts函数函数,从终端进行字符串的输入和输出从终端进行字符串的输入和输出 p-1461. gets函数的调用形式如下函数的调用形式如下:gets(str_adr)2. puts函数的调用形式如下函数的调用形式如下:puts (str_adr)调用调用 puts函数时,将从这一地址开始,依次输出存储单元中函数时,将从这一地址开始,依次输出存储单元中的字符,遇到的字符,遇到0即结束输出,并自动输出一个换行符。即结束输出,并自动输出一个换行符。 main( )char str100; gets(str); puts(st
11、r); puts(str); main( ) char str100; gets(str); printf(“%s”,str); printf(“%s”,str);10.4 10.4 字符串数组字符串数组( (用二维数组存放字符串)用二维数组存放字符串)p-146p-146char ca35= A, BB, CCC;此定义也可写成:此定义也可写成:char ca 5=“A”, “BB”,“CCC”;char *p3=“abc”, “EFGH”,”1234”;012340A01BB02CCC010.5 10.5 用于字符串处理的函数用于字符串处理的函数 p-148p-1481.字符串复制字符串复
12、制( (拷贝拷贝) )函数函数strcpy。调用形式如下调用形式如下: strcpy(s1,s2)此函数用来把此函数用来把s2所指字符串所指字符串(源源)的内容复制到的内容复制到s1所所指存储空间指存储空间(目的目的)中,函数返回中,函数返回s1的值,即目的串的值,即目的串的首地址。注意:为保证复制的合法性,的首地址。注意:为保证复制的合法性,s1必须指必须指向一个足够容纳向一个足够容纳s2串的存储空间。串的存储空间。调用字符串复制调用字符串复制( (拷贝拷贝) )函数函数strcpystrcpy#include “string.h”main( ) char str120=“Hello”, s
13、tr220=AB; strcpy ( str1 , str2 ) ; puts ( str1 ) ;编写字符串复制编写字符串复制( (拷贝拷贝) )函数函数strcpystrcpyviod 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.2.字符串连接函数字符串连接函数strcat strcat p-148p-148 strcat函数的调用形式如下:函数的调用形式如下: strcat(s1,s2)该函
14、数将该函数将s2所指字符的内容连接到所指字符的内容连接到s1所指的字符串后面,所指的字符串后面,并自动覆盖并自动覆盖s1串末尾的串末尾的0;函数返回;函数返回s1的地址值。的地址值。注意:注意:s1所指字符串应有足够的空间容纳两串合并后的内容。所指字符串应有足够的空间容纳两串合并后的内容。调用字符串连接函数调用字符串连接函数strcatstrcat#include “string.h”main( ) char str120=“Hello”, str220=AB; strcat ( str1 , str2 ) ; puts ( str1 ) ;编写字符串连接函数编写字符串连接函数strcat:v
15、iod scat(char *s ,char *t) int i=0,j=0; while ( (si!=0) i+; while(si=tj)!=0) i+; j+;main( ) char s 20=“Hello”, t20=AB; scat ( s , t ) ; puts ( s ) ;3 3、求字符串长度函数、求字符串长度函数strlenstrlen strlen函数的调用形式如下:函数的调用形式如下: strlen(s) 此函数计算出以此函数计算出以s为起始地址的字符串的长度,为起始地址的字符串的长度,并作为函数值返回。这一长度不包括串尾的结并作为函数值返回。这一长度不包括串尾的结
16、 束标志束标志0。调用求字符串长度函数调用求字符串长度函数strlenstrlen#include “string.h”main( ) char str20=“Hello”;int n; n=strlen(str); ; printf(“n=%d”,n);编写求字符串长度函数编写求字符串长度函数strlenstrlenslen(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 4、字符串比较函数、字符串比较函数str
17、cmpstrcmp strcmp函数的调用形式如下函数的调用形式如下: strcmp( s1 , s2 )该函数用来比较该函数用来比较s1和和s2所指定字符串的大小。若串所指定字符串的大小。若串s1串串s2,函数,函数值大于值大于0(正数);若串(正数);若串s1=串串s2,函数值等于,函数值等于0;若串;若串s1 0 ) printf(str1str2n) ; else if ( n 0 ) printf(str1 0 ) printf(stn) ; else if ( n 0 ) printf(s tn); else printf(s=tn);课后习题课后习题 p-152 10.1 以下能
18、正确进行字符串赋值、赋初值的语句组是以下能正确进行字符串赋值、赋初值的语句组是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) );10.3 以下程序段的输出结果是以下程序段的输出结果是 A) 11 B) 10 C) 9 D) 8printf(%dn, strlen(ATSn 0121);习题
19、习题10. 4 p-15210.4 当运行以下程序时输入当运行以下程序时输入OPEN T H E DOOR CR, 则输出结果是则输出结果是: A)oPEN tHE dOOR. B) open the door. C) OPEN T H E DOOR D) Open The Door.#include stdio.hchar fun (char *c) if (*c=A ) *c-= A a; return *c; main( )char s81, *p=s;gets (s);while(*p) *p=fun (p); putchar (*p); p+; putchar (n);习题习题10.
20、 5 p-15210.5以下程序段的输出结果是以下程序段的输出结果是A ) GFEDCBA B) AGADAGAC) AGAAGAG D) GAGGAGA#include stdio.h#include string.hvoid fun(char *w , int m) char s, *p1=w, *p2=w+m-1; while (p1p2) s=*p1+; *p1=*p2-; *p2=s; main() char a =ABCDEFG;fun (a, strlen(a); puts(a); 分析分析10.510.5while (p1p2) s=*p1+; *p1=*p2-; *p2=s;
21、 “ A B C D E F G ” 习题习题10.610.6 p-15310.6以下程序段的输出结果是以下程序段的输出结果是A) ABCD B) A C) D D) ABCD BCD B C ABC CD C B AB D D A Amain( ) char s = ABCD, *p; for (p=s; ps+4; p+) printf(%sn,p); 10.7 设有如下定义设有如下定义:char *aa2=abcd, ABCD; 则以下说法中正确的是则以下说法中正确的是:A)aa数组元素的值分别是数组元素的值分别是abcd和和 ABCDB)aa是指针变量,它指向含有两个数组元素的字符型一
22、维数组。是指针变量,它指向含有两个数组元素的字符型一维数组。C)aa数组的两个元素分别存放的是含有四个字符的一维数组的首地址。数组的两个元素分别存放的是含有四个字符的一维数组的首地址。D)aa数组的两个元素中各自存放了字符数组的两个元素中各自存放了字符a和和A的地址的地址012340abcd01ABCD0aa0aa110.8 以下程序段的输出结果是以下程序段的输出结果是 A)6385B)69825C)63825D)693825 main( ) char ch25= 6937,8254 , *p2;int i, j , s=0;for (i=0; i2; i+) pi=chi; for (i=0; i0& pij0&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化创意产业知识产权保护措施和方案
- 项目组年终工作总结与反思报告
- 2025年-湖南省建筑安全员知识题库附答案
- 人力资源管理师就业前景考题试题及答案
- 全面解析消防设施操作员考试题目及答案
- 乡村全科助理医师-乡村全科执业助理医师预测试卷1
- 临床助理医师-《临床执业助理医师》(第二单元)押题密卷3
- 2025年份3月数字化点餐系统数据隐私保护补充协议
- 保险行业风险管理与合规方案
- 五年级数学(小数四则混合运算)计算题专项练习及答案汇编
- 2024年涉密人员考试试题库保密基本知识试题含答案
- 2024年退股事宜洽谈备忘录3篇
- 2025版科技成果转化合作协议书3篇
- 微创介入诊断治疗管理制度
- 新质生产力促进老年人公共体育服务高质量发展研究
- 大学生学业个人规划
- 软件产品售后服务及维护流程指南
- T-ZNZ 248-2024 红黄壤贫瘠耕地快速培肥技术规范
- 2024-2025一年级下册体育教学计划和教案
- 汽车吊起重吊装方案
- 2024年度安徽省高校教师资格证之高等教育学题库附答案(典型题)
评论
0/150
提交评论