《C语言程序设计》10 字符串写字字帖_第1页
《C语言程序设计》10 字符串写字字帖_第2页
《C语言程序设计》10 字符串写字字帖_第3页
《C语言程序设计》10 字符串写字字帖_第4页
《C语言程序设计》10 字符串写字字帖_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章字符串12回顾函数的作用函数的声明格式和各部分作用函数中的实参和形参的区别函数的调用3目标字符信息在计算机中的描述字符信息的存储方式字符信息的处理函数4字符串字符型数组可以存放若干个字符,这些字符合在一起代表一个完整的语义,如员工的名字,而这一组字符就被称作为字符串。ZENGCOBRAchara='z';charb='e';charc='n';chard='g';chare='c';charf='o';charg='b';charh='r';chari='a';描述完整信息时,变量定义太多,使用不方便字符变量可以存储字符chara='Y';chara='N';5字符串字符数组是存放字符型数据的数组,其中每个数组元素存放的值都是单个字符。字符串是程序设计中必不可少的一种数据类型,它是由若干个字符组成的,并且用双引号括起来表示。在有效字符后,最后一个字符是结束标记('\0')。HelloWorld\0字符串结束符6中文字符串中文常用汉字太多,没有办法象英文那样用一个字节即256个数字就能描述所有英文所需要的字母、数字、符号等所以计算机中的中文通常是采用2个字节即64K个数字,来描述中文的一些常用汉字、数字、符号等。ZENGCOBRA\0张三\0英文可以用一个字节即256个数字就能描述所有英文所需要的字母、数字、符号等九个英文字母所占据的9个字节加上1个字符串结束标记'\0',共10个字节。两个汉字所占据的4个字节加上1个字符串结束标记'\0',共5个字节7字符串与字符数组在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串字符数组和字符串的区别是:字符串的末尾有一个空字符‘\0‘字符串可按如下方式声明并初始化:charname[15]={'z','e','n','g','c','o','b','r','a','\0'};charname[15]="zengcobra";charpassword[]="12345678";省略数组大小,系统自动计算,大小为后面的字符总数加1,最后一个元素存入一个空字符。系统将自动加入一个空字符手工加入一个空字符8voidmain(){chara[40]; /*声明一个有个元素的数组*/intn=0; /*定义字符串长度计数器,并且该计数器也做为数组元素下标*/do{scanf("%c",&a[n]);/*读取第一个字符存储到数组相应位置*/if(('A'<=a[n])&&(a[n]<='Z')) /*判断写入到数组中的元素是否是大写字母*/a[n]+=32; /*如果是大写字母则在其上加上32,变为小写字母*/n++;/*位置后移一个*/}while(a[n-1]!='\n');/*判断输入的字符是否是回车,如果是则推出循环*/n=n-1;/*n减一后当前下标定位到最后输入的回车符*/for(inti=0;i<=n;i++)

/*通过循环输出了数组中的所有元素,包括最后的回车符,如果循环判断条件变为<n,则输出到回车换行前*/printf("%c",a[i]);}字符数组示例(一)9

#include"stdio.h"voidmain(){ chars1[40]; printf("%s","请输入员工姓名,回车键结束\n"); scanf("%s",s1); //经过相应的计算得到员工的工资,这里假设为。

printf("%s","员工姓名:"); printf("%s",s1); printf("%s","\n员工工资:"); printf("%.2f",3000.0); /*控制输出,仅输出两位小数*/ return0;}

格式描述串中使用转意字符%s,代表输入的是字符串字符数组示例(二)10字符串处理函数(一)与字符串有关的内置函数在头文件string.h中定义要使用标准库字符串处理函数,程序前应该包含:

#include<string.h>size_t类型strlen(字符串)size_t实际上是在string.h头文件中定义的unsigned无符号整数类型,意味着函数的返回值即所求得的字符串的长度为非负数。测试指定字符串的长度除字符串结束标记外的所有字符的个数。11

#include"stdio.h"#include"string.h"intmain(){ chars1[]="zengcobra"; chars2[]={'z','e','n','g','c','o','b','r','a'}; chars3[]={'z','e','n','g','c','o','b','r','a','\0'}; size_tlength=strlen("zengcobra"); printf("字符串zengcobra的长度:%d\n",length); length=strlen(s1); printf("用字符串初始化数组的长度:%d\n",length);

strlen示例(一)12strlen示例(二)

length=strlen(s2); printf("用单个字符依次初始化数组中元素的数组长度:%d\n",length); length=strlen(s3); printf("用单个字符依次初始化数组中元素,并手动加上字符串结束标记的数组长度:%d\n",length); getchar(); return0;}strlen函数计算字符串长度时,类似于我们使用%s格式控制符输出数组中的字符串,它不会事先计算数组中字符串的长度,只是单纯的依次读取数组中的元素,直到遇到字符串结束标记13字符串处理函数(二)strcpy(字符数组,字符串)第二个参数作为原字符串可以是字符串,也可以是包含字符串的字符数组;第一个参数作为目的地只能是存储字符串的字符数组。将一个字符串中的所有字符复制到另一个字符串中#include"stdio.h"#include"string.h"voidmain(){ charsource[]="zengcobra"; chardestin[40];//必须事先指定数组的长度

strcpy(destin,source);//将原数组中的内容写入到目的数组中

printf("原字符串:%s\n",source); printf("目的字符串:%s\n",destin);strcpy(destination,“isaniceguy”);//连接上一个字符串常量

printf("%s\n",destination);}

14字符串处理函数(二)目的字符串的长度必须事先定义好,而且还要足够大。像这样的定义是不行的:会直接报编译错误:unknownsize,表明目的字符数组的长度未知chardestination[];strcpy(destination,source);strcpy(字符数组,字符串)将一个字符串中的所有字符复制到另一个字符串中即便在目的字符数组声明时指定了长度,也要保证长度足够大,能容纳得了原字符串。否则就会出现运行时错误。15字符串处理函数(三)strcat(字符数组名,字符串)将第二个字符串接在第一个字符串的后面,形成一个新字符串;然后将新产生的字符串保存在一个数组中第一参数是存放有字符串的数组,在函数中作为代连接字符串的前半部分,并且新字符串也是保存在这个数组中的;而第二个参数可以是一个字符串常量,也可以是一个字符数组。#include"stdio.h"#include"string.h"voidmain(){ chars1[40]="zengcobra"; chars2[]="isaniceguy"; printf("第一个字符串:%s\n",s1); printf("第二个字符串:%s\n",s2); strcat(s1,s2);//连接之后得到新字符串

printf("连接之后的字符串:%s\n",s1);}s1作为字符串连接的前半段字符串,并且新产生的字符串也被保存在这个数组中。s2作为字符数组,保存了字符串连接的后半段字符串。s2字符数组也可以换成字符串常量。16字符串处理函数(三)字符串连接函数使用时,重要的一点是作为第一个参数的字符数组要足够大,大到能够存放连接后产生的新字符串,否则将产生编译错误:arrayboundsoverflow,表明数组越界。即声明的数组无法存储连接的字符串。同时也要注意数组声明时,长度为两个代连接字符串有效字符个数的基础上加1比如第一个字符串为”zengcobra”包含10个有效字符,而第二个字符串”isaniceguy”包含13个有效字符,那么数组长度必须要设定为24个元素。否则就会出现运行时错误:17二维字符数组知道了二维数组作为一个整体,能够存储更大的数据量,并且代表更加复杂的语义。其实二维数组比较多的应用是在字符串的应用中。我们可以通过二维字符数组来表示若干个具备整体意义的字符串。悄悄的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。我们可以认为每一句诗作为一个一维字符数组,然后将四个一维数组合并在一起形成一个二维数组,数组中的每一行就是一句诗18#include"stdio.h"intmain(){charpoem[10][40];intlength;printf("请输入诗的名字\n");scanf("%s",poem[0]);//利用scanf函数,对二维数组中的一行赋值

printf("请输入作者的名字\n");scanf("%s",poem[1]);printf("请输入诗句,每输入一句请敲击回车键,结束请敲击#键\n");for(length=2;length<10;length++){二维字符数组示例(一)19二维字符数组示例(二)scanf("%s",poem[length]);if(poem[length][0]=='#')/*判断第length行的第0个元素是不是为#,如果是则退出*/break;}printf("\n\n%s\n",poem[0]);printf("---%s\n",poem[1]);for(inti=2;i<length;i++){printf("%s\n",poem[i]);}return0;}20#include"stdio.h"#include"string.h"intmain(){chara[10][20],b[20];inti,j,k;printf("请输入员工姓名,每个姓名以回车分隔,最后以#结束\n");for(i=0;i<10;i++){ gets(a[i])/*利用string.h中定义的gets函数完成字符串输入到数组中*/ if(a[i][0]=='#')/*判断第i行的第个元素是不是为#,如果是则退出*/ break;}二维字符数组示例(三)21二维字符数组示例(三)for(j=0;j<i;j++) /*选用冒泡排序法,共比较i-1轮*/ for(k=i-1;k>j;k--) /*第i-1轮从下向上共比较i-1-j次*/ if(strcmp(a[k],a[k-1])<0)/*相邻两个比较,小者上调*/ { strcpy(b,a[k]); strcpy(a[k],a[k-1]); strcpy(a[k-1],b); }

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论