版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章字符串
p-14110.1用一维字符数组存放字符串1、C语言对字符串的约定
在C语言中,字符串是借助于字符型一维数组来存放,并规定以符‘\0’作为“字符串结束标志”。由第六章已知:‘\0’是一个转义字符,称为“空值”。它的ASCII代码值为0。‘\0’作为标志占用存储空间,但不计入串的实际长度。chars[100];2、C语言中表示字符串常量的约定虽然C语言中没有字符串数据类型,但却允许使用“字符常量”。在表示字符串常量时,不需要人为在其末尾加入‘\0’。例如:字符串常量“Hello!”不必写成“Hello!\0”,C编译程序将自动完成这一工作,在末尾添加字符‘\0'。3、C语言中字符串常量给出的是地址值:每一个字符串常量都分别占用内存中一串连续的存储空间,这些连续的存储空间实际上就是字符型一维组。这些数组虽然没有名字,但C编译系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址。不同的字符串具有不同的起始地址。也就是说:在C语言中,字符串常量被隐含处理成一个以‘\0’结尾的无名字符型一维数组。例:
p=“string”;printf(“%d”,”hello”);char*p;4、字符数组与字符串的区别:
p-142?
字符数组是由若干个字符组成,但末尾不一定有’\0’。字符串末尾必须有’\0’。10.1.1通过赋初值的方式给一维字符数组赋字符串
p-1421、charstr[7]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’,‘\0’};2、charstr[7]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};3、charstr[6]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};4、charstr[8]={“Hello”};5、charstr[8]=“Hello”;6、charstr[]=“string”;7、charstr[5]=“Hello”;8、inta[5]=1,3,5,7,9;main(){charstr[8];str[8]=“Hello”;……}10.1.2在C程序执行过程中给一维字符数组赋字符串
p-1431.不可以用赋值语句给字符数组整体赋一串字符。本章的开始曾提到:当作字符串变量使用的字符数组,不能由赋值语句直接赋字符串常量。
charmark[10];
mark="CProgram";/*赋值不合法*/2.给数组元素逐个赋字符值,最后人为加入串结束标志
利用我们目前学过的知识,在程序过程中,可以通过逐个给数组元素赋值方式,达到给一维字符数组赋字符串的目的。
main(){charmark[10];mark[0]='C';mark[1]='';mark[2]='P';mark[4]='r';……mark[9]=‘\0’;……}10.2使指针指向一个字符串
p-14410.2.1通过赋初值的方式使指针指向一个字符串可以在定义指针变量的同时,将存放字符串的存储单元起始地址赋给指针变量。例如:char*ps1=“fromone”;10.2.2通过赋值运算使指针指向一个字符串如果已经定义了一个字符型指针变量,可以通过赋值运算将某个字符串的起始地址赋给它,从而使其指向一个具体的字符串。char*ps1;ps1=“fromone";
10.2.3用字符数组作为字符串和用指针指向一个字符串的区别
若有以下定义:charmark[]="APROGRAM";char*pmark="APROGRAM";虽然字符串的内容相同,但它们占有不同的存储空间
markpmark->“APROGRAM”APROGRAM\010.3字符串的输入和输出
p-14510.3.1输入和输出字符串时的必要条件输入项和输出项都必须是地址。intx;scanf(“%d”,&x”);printf(“%d”,x);10.3.2用格式说明符%s进行整串输入和输出1.在scanf函数中使用格式说明%s可以实现字符串整体输入。函数调用形式如下:
charstr[100];scanf("%s",str);2.printf函数中使用格式说明%s可以实现字符串的整体输出,函数调用形式如下:
printf("%s",str);例:main(){charstr[100]=“hello”;printf(“%s”,str);}此处str_adr是地址值。调用printf函数时,将从这一地址开始,依次输出存储单元中的字符,直到遇‘\0’为止。输出结束后不自动换行。10.3.3调用gets、puts函数,从终端进行字符串的输入和输出
p-1461.gets函数的调用形式如下:gets(str_adr)2.puts函数的调用形式如下:puts(str_adr)调用puts函数时,将从这一地址开始,依次输出存储单元中的字符,遇到‘\0’即结束输出,并自动输出一个换行符。
main(){charstr[100];gets(str);puts(str);puts(str);}main(){charstr[100];gets(str);printf(“%s”,str);printf(“%s”,str);}10.4字符串数组(用二维数组存放字符串)p-146charca[3][5]={"A","BB","CCC"};此定义也可写成:charca[][5]={“A”,“BB”,“CCC”};char*p[3]={“abc”,“EFGH”,”1234”};012340A\01BB\02CCC\010.5用于字符串处理的函数p-1481.字符串复制(拷贝)函数strcpy。调用形式如下:
strcpy(s1,s2)此函数用来把s2所指字符串(源)的内容复制到s1所指存储空间(目的)中,函数返回s1的值,即目的串的首地址。注意:为保证复制的合法性,s1必须指向一个足够容纳s2串的存储空间。调用字符串复制(拷贝)函数strcpy#include“string.h”main(){charstr1[20]=“Hello”,str2[20]="AB";
strcpy(str1,str2);
puts(str1);}编写字符串复制(拷贝)函数strcpyviodscopy(char*s,char*t){inti=0;
while((s[i]=t[i])!=‘\0’)i++;}main(){chars[20]=“Hello”,t[20]="AB";
scopy(s,t);
puts(s);}2.字符串连接函数strcatp-148
strcat函数的调用形式如下:
strcat(s1,s2)该函数将s2所指字符的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的‘\0’;函数返回s1的地址值。注意:s1所指字符串应有足够的空间容纳两串合并后的内容。调用字符串连接函数strcat#include“string.h”main(){charstr1[20]=“Hello”,str2[20]="AB";
strcat(str1,str2);
puts(str1);}编写字符串连接函数strcat:viodscat(char*s,char*t){inti=0,j=0;while((s[i]!=‘\0’))i++;
while((s[i]=t[j])!=‘\0’){i++;j++;}}main(){chars[20]=“Hello”,t[20]="AB";
scat(s,t);
puts(s);}3、求字符串长度函数strlen
strlen函数的调用形式如下:
strlen(s)此函数计算出以s为起始地址的字符串的长度,并作为函数值返回。这一长度不包括串尾的结束标志‘\0'。调用求字符串长度函数strlen#include“string.h”main(){charstr[20]=“Hello”;intn;n=strlen(str);;
printf(“n=%d”,n);}编写求字符串长度函数strlenslen(char*str){inti=0;while(str[i]!=‘\0’)i++;returni;}main(){charstr[20]=“Hello”;intn;n=slen(str);;
printf(“n=%d”,n);}4、字符串比较函数strcmpstrcmp函数的调用形式如下:
strcmp(s1,s2)该函数用来比较s1和s2所指定字符串的大小。若串s1>串s2,函数值大于0(正数);若串s1==串s2,函数值等于0;若串s1<串s2,函数值小于0(负数)。字符串比较的方法是:依次对s1和s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(字符大小的依据是其ASCII码值)。调用字符串比较函数strcmpmain(){charstr1[10],str2[10];intn;gets(str1);gets(str2);
n=strcmp(str1,str2);if(n>0)printf("str1>str2\n");
elseif(n<0)printf("str1<str2\n");
elseprintf("str1==str2\n");}编写字符串比较函数strcmpscmp(char*s,char*t){inti=0;
while(s[i]==t[i]&&s[i])i++;
return(s[i]–t[i]);}main(){chars[10],t[10];intn;gets(s);gets(t);
n=scmp(s,t);if(n>0)printf("s>t\n");
elseif(n<0)printf("s<t\n");
elseprintf("s==t\n");}课后习题
p-152
10.1以下能正确进行字符串赋值、赋初值的语句组是A)chars[5]={'a','e','i','o','u'};B)char*s;s="good!";C)chars[5]="good!";D)chars[5];s="good!"10.2以下程序段的输出结果是A)68B)0C)字符D的地址D)不确定的值charstr[]="ABCD",*p=str;printf("%d\n",*(p+4));10.3以下程序段的输出结果是
A)11B)10C)9D)8printf("%d\n",strlen("ATS\n012\1\\"));习题10.4
p-15210.4当运行以下程序时输入OPENTHEDOOR<CR,则输出结果是:A)oPENtHEdOOR.B)openthedoor.C)OPENTHEDOORD)OpenTheDoor.#include"stdio.h"charfun(char*c){if(*c<='Z'&&*c>='A')*c-='A'–'a';return*c;}main(){ chars[81],*p=s; gets(s); while(*p){*p=fun(p);putchar(*p);p++;} putchar('\n'); }习题10.5
p-15210.5以下程序段的输出结果是A)GFEDCBAB)AGADAGA C)AGAAGAGD)GAGGAGA#include"stdio.h"#include"string.h"voidfun(char*w,intm){chars,*p1=w,*p2=w+m-1;while(p1<p2) {s=*p1++;*p1=*p2--;*p2=s;}}main(){chara[]="ABCDEFG"; fun(a,strlen(a));puts(a);}分析10.5while(p1<p2) {s=*p1++;*p1=*p2--;*p2=s;}“ABCDEFG”
习题10.6
p-15310.6以下程序段的输出结果是A)ABCD B)A C)D D)ABCDBCDBCABCCDCBABDDAA
main() {chars[]="ABCD",*p; for(p=s;p<s+4;p++)printf("%s\n",p); }10.7设有如下定义:char*aa[2]={"abcd","ABCD"};
则以下说法中正确的是:A)aa数组元素的值分别是"abcd"和"ABCD"B)aa是指针变量,它指向含有两个数组元素的字符型一维数组。C)aa数组的两个元素分别存放的是含有四个字符的一维数组的首地址。D)aa数组的两个元素中各自存放了字符‘a’和‘A’的地址012340abcd\01ABCD\0aa[0]aa[1]10.8以下程序段的输出结果是
A)6385 B)69825 C)63825 D)693825
main(){charch[2][5]={"6937","8254"},*p[2]; inti,j,s=0; for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2)s=10*s+p[i][j]-'0';printf("%d\n",s);
}0123406937\018254\0for(j=0;ch[i][j]>'\0'&&ch[i][j]<='9';j+=2)s=10*s+ch[i][j]-'0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 刻苦拼搏攀登人生理想的巅峰-一位清华在校生的报告
- 电气机械工程投资分析考核试卷
- 合成材料在智能分析中的应用考核试卷
- 医药制造业创新药物研发与商业化考核试卷
- 数字医疗与健康管理整合资源提升效果考核试卷
- 公司安全体系基础知识培训考核试卷
- 建筑装饰与绿色建筑认证的标准解析考核试卷
- 企业治理与安全文化的关系考核试卷
- DB11T 494.8-2013 人力资源服务规范 第8部分:培训服务
- DB11-238-2021 车用汽油环保技术要求
- GB/T 17892-2024优质小麦
- 南京市2024-2025学年六年级上学期11月期中调研数学试卷二(有答案)
- 江苏省镇江市第二中学2023-2024学年高二上学期期中考试数学试卷(无答案)
- 2023-2024学年全国初一下生物人教版期末考试试卷(含答案解析)
- 2024年甘肃省陇南市武都区人民法院招聘18人历年高频难、易错点500题模拟试题附带答案详解
- 2024至2030年中国自动车配件行业投资前景及策略咨询研究报告
- 2024-2030年中国虚拟专用网络(VPN)行业市场行业发展分析及发展前景研究报告
- 检验检测机构内审员检查表
- 2024中煤电力限公司面向中煤集团内部招聘15人高频难、易错点500题模拟试题附带答案详解
- 统编版(2024新版)七年级上册历史第二单元 夏商周时期:奴隶制王朝的更替和向封建社会的过渡 单元复习课件
- 高危儿规范化健康管理专家共识解读
评论
0/150
提交评论