数据的组织结构-字符串、二维数组_第1页
数据的组织结构-字符串、二维数组_第2页
数据的组织结构-字符串、二维数组_第3页
数据的组织结构-字符串、二维数组_第4页
数据的组织结构-字符串、二维数组_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

数据的组织结构—字符串第四章三、字符数组与字符串1数据的组织结构--字符串、二维数组共53页,您现在浏览的是第1页!字符串的组织字符串是指一个有限长度的字符序列,并且用‘\0’字符结尾(‘\0’作为字符串的结束标志)字符串常量用一个双引号(“”)括起来 例:“Cprogram”“blue”C语言中,没有直接提供字符串数据类型,字符串存储在字符数组中“Cprogram”的存储Cprogram\001234567892数据的组织结构--字符串、二维数组共53页,您现在浏览的是第2页!

实现字符串的方法

用一维字符型数组定义chararray[10];

可以用array[0]~array[9]存放9个字符。

字符串的初始化可以用数组的初始化方法进行字符串的初始化

charstr[]={‘C’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’,‘\0’};把字符串作为整体进行初始化charstr[]=“Cprogram”;(自动在末尾加‘\0’)Cprogram\001234567893数据的组织结构--字符串、二维数组共53页,您现在浏览的是第3页!说明用字符型数组存放字符串时,在有效字符后自动加’\0’字符串中所包含字符的个数称为字符串长度例如,“blue”的长度为4,但占5个字节(’\0’占一位)

字符串占用数组元素的个数为字符串长数加14数据的组织结构--字符串、二维数组共53页,您现在浏览的是第4页!字符串与字符数组的区别字符数组是变量,用于存放字符型数据,包括字符串;字符串是数据,存放在字符数组中,是一串用‘\0’结束的字符字符数组的长度可以大于字符串的长度5数据的组织结构--字符串、二维数组共53页,您现在浏览的是第5页!字符串的结束符‘\0’‘\0’是字符串结束标志,有关字符串处理的所有函数都要求用‘\0’结束。如果将字符串按字符一个一个地处理就需要人为地添加这个结束符。6数据的组织结构--字符串、二维数组共53页,您现在浏览的是第6页!程序段:逐个输出字符串的内容。i=0;while(str[i]!=‘\0’){/*遇到字符串结束时停止输出*/ putchar(str[i]);i++;}putchar(“\n”);7数据的组织结构--字符串、二维数组共53页,您现在浏览的是第7页!字符串的输入(整体输入)标准函数scanf(“%s”,str);/*自动添加‘\0’*/gets(str);/*把换行符转换为‘\0’*/其中str是存放字符串的数组名称,如:charstr[20];注意事项用“%s”输入字符串时是用空格符、换行符或制表符作为输入结束,在字符串中不能含有这些符号用“%s”格式符时,对应的输入变量str前不能有&gets()函数以换行符作为输入的结束,在输入的字符串中允许包含空格和制表符8数据的组织结构--字符串、二维数组共53页,您现在浏览的是第8页!字符串输出举例charstr[]="Hello";puts(str);puts(str);显示结果:HelloHellocharstr[]="Hello";printf("%s%s",str,str);显示结果:HelloHello9数据的组织结构--字符串、二维数组共53页,您现在浏览的是第9页!字符串转换成数值类型

(P98例4-7)atof(str);--将字符串str转换成一个double值atoi(str);--将字符串str转换成普通整型(int)atol(str);--将字符串str转换成长整型(long)原型在stdlib.h中,其中str是数字字符串数值类型转换成字符串(P99例4-8)

itoa(num,str,radix);num是一个int类型的数值ltoa(num,str,radix);

num是一个long类型的数值其中str用于存放结果的字符串,radix是用户指定的进制数,它的取值必须介于2~36之间10数据的组织结构--字符串、二维数组共53页,您现在浏览的是第10页!#include<stdio.h>#include<string.h>#include<ctype.h>#defineNUM26main(){intletter[NUM]={0}; /*用于存放统计结果的一维数组*/charstr[80]; /*存放以字符串形式输入的文本*/inti;printf("\nEnteratextline<Enterend>");gets(str);/*输入文本*/

strupr(str);/*将文本中的所有小写字母转换成大写字母*/for(i=0;str[i]!='\0';i++){ /*统计每个字母出现的次数*//*isalpha判ch中是否为字母,是则返回非0,否则返回0*/if(isalpha(str[i])){letter[str[i]-'A']=letter[str[i]-'A']+1;}}for(i=0;i<NUM;i++) /*输出统计结果*/printf("\n\'%c\':%d",'A'+i,letter[i]);}程序代码与教材P84~85例4-2比较11数据的组织结构--字符串、二维数组共53页,您现在浏览的是第11页!实例

假设用户的密码是“administrators”,下面这个程序将用于检测用户输入的密码是否正确。如果不正确,给出相应的提示信息,并请求用户重新输入。

教材P102例4-1012数据的组织结构--字符串、二维数组共53页,您现在浏览的是第12页!字符串拷贝

strcpy(str1,str2);--将字符串str2拷贝到字符串str1中str1是用于存放拷贝结果的存储区域例D-1:从键盘输入若干单词,找出最长的单词问题分析与找最大值类似因不知输入的单词数量,不能确定循环次数,以空字符串作为结束标志用字符串的长度进行比较,但要保存当前最长字符串和其长度13数据的组织结构--字符串、二维数组共53页,您现在浏览的是第13页!字符串连接

strcat(str1,str2);--将str2连接在str1之后,并在结束处添加一个字符串结束符‘\0’实例:根据用户的选择输出相应的字符串。教材P104例4-11说明显示一个菜单,用户选择一项,则可以输出与该项相关的信息14数据的组织结构--字符串、二维数组共53页,您现在浏览的是第14页!switch(choice){/*根据用户的选择拼接字符串*/case1: strcat(str1,str3); strcat(str1,str2); break;case2: strcat(str1,str4); strcat(str1,str2); break;case3: strcat(str1,str5); strcat(str1,str2); break;case4: strcat(str1,str6); strcat(str1,str2); break;default: strcpy(str1,"Error");/*被覆盖,可用strcat*/ break;}printf("\n%s",str1);/*显示字符串*/}15数据的组织结构--字符串、二维数组共53页,您现在浏览的是第15页!#include<stdio.h>#include<string.h>#include<ctype.h>main(){inti;chartext[1000];gets(text); /*输入文本内容*/for(i=0;text[i]!='\0';i++){if(isalnum(text[i])) text[i]=text[i]+5; /*变换*/}puts(text);for(i=0;text[i]!='\0';i++){if(isalnum(text[i])) text[i]=text[i]-5; /*还原*/ }puts(text);}程序代码判断参数为字母或数字,返回真。原型在ctype.h中16数据的组织结构--字符串、二维数组共53页,您现在浏览的是第16页!四、二维数组二维数组由M行N列具有相同性质的数据组成,有两个下标值唯一确定一个元素。定义格式: <数据类型>数组名[行长度][列长度];doublearr[10][20];存储时按行排列下标范围arr[0][0]--arr[9][19]表示数据共200个元素数组元素访问arr[0][0]=arr[1][2]+9.2;----用下标访问

数组元素的引用形式:数组名[下标][下标]17数据的组织结构--字符串、二维数组共53页,您现在浏览的是第17页!二维数组的初始化分行给二维数组赋初值

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};按数组排列顺序对各元素赋初值

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};在对全部数组元素赋初值时,可以不指定数组行长度

inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};对部分元素赋初值

inta[3][4]={{1},{5},{9}};

inta[3][4]={1,5,9};18数据的组织结构--字符串、二维数组共53页,您现在浏览的是第18页!例转置矩阵的计算#include<stdio.h>main() { intx[3][2]={{1,2},{3,4},{5,6}}; inty[2][3]; inti,j; for(i=0;i<3;i++) for(j=0;j<2;j++)

y[j][i]=x[i][j]; …/*输出2行3列的矩阵*/}12345613524619数据的组织结构--字符串、二维数组共53页,您现在浏览的是第19页!#include<stdio.h>#defineNUM5/*矩阵行列数*/main(){intm[NUM][NUM];/*定义二维数组变量*/inti,j;/*输入矩阵*/printf("\Enter%drows%dcolsdatasforthemaxtrix:\n",NUM,NUM);for(i=0;i<NUM;i++)for(j=0;j<NUM;j++) scanf("%d",&m[i][j]);/*显示矩阵*/for(i=0;i<NUM;i++){for(j=0;j<NUM;j++) printf("%4d",m[i][j]);printf("\n");}20数据的组织结构--字符串、二维数组共53页,您现在浏览的是第20页!第4章第二部分作业阅读教科书第四章(字符数组与字符串、二维数组)一、阅读P1193二、编程题P1207、8P1209,10(选作)三、上机P1207P121221数据的组织结构--字符串、二维数组共53页,您现在浏览的是第21页!附录、字符串处理函数和实现相应功能的部分自编程序(补充自学)求字符串长度strlen()字符串复制strcpy()字符串连接strcat()字符串比较

strcmp()

22数据的组织结构--字符串、二维数组共53页,您现在浏览的是第22页!【例1_2】求串长自编程序

#include<stdio.h>main(){chara[80];inti=0,count=0;gets(a);

while(a[i]!='\0'){count++;i++;}printf("%s:%d\n",a,count);}23数据的组织结构--字符串、二维数组共53页,您现在浏览的是第23页!chara[5]=”ABCD”,b[5]=”abcd”;char

temp[5];strcpy(temp,a);strcpy(a,b);strcpy(b,temp);

交换两个数组中字符串:24数据的组织结构--字符串、二维数组共53页,您现在浏览的是第24页!#include<stdio.h>main(){inti=0;chara[50],b[80];gets(a);

while(a[i]!='\0'){b[i]=a[i];i++;}

b[i]='\0';

puts(b);}程序实现25数据的组织结构--字符串、二维数组共53页,您现在浏览的是第25页!【例3_2】连接字符串的自编程序。

ABCD

\0

b

abc\0

a找a中串的尾

while(a[i]!='\0')i++;

……………………26数据的组织结构--字符串、二维数组共53页,您现在浏览的是第26页!#include<stdio.h>main(){inti=0,j=0;chara[80],b[30];gets(a);gets(b);

while(a[i]!='\0')i++;

while(b[j]!='\0'){a[i]=b[j];i++;j++;}

a[i]='\0';

puts(a);}程序实现27数据的组织结构--字符串、二维数组共53页,您现在浏览的是第27页!#include<stdio.h>#include<string.h>main(){chara[30],b[30];gets(a);gets(b);if(strcmp(a,b)>0)printf("个串大于第二个串\n");if(strcmp(a,b)==0)printf("两串相等\n");if(strcmp(a,b)<0)printf("个串小于第二个串\n");}不能写成if(a>b)28数据的组织结构--字符串、二维数组共53页,您现在浏览的是第28页!【例】字符串示例#include<stdio.h>main(){inti=0;chara[]="K";charb[]={"Sitdown"};while(a[i]!='\0'){putchar(a[i]);i++;}printf("\n");i=0;while(b[i]!='\0'){putchar(b[i]);i++;}}

省略了2可省略

K

\0a[0]a[1]abSitdown\0012345687常用\0判断是否结束循环

等价于{'K','\0'}

29数据的组织结构--字符串、二维数组共53页,您现在浏览的是第29页!字符串与字符数组区别字符串放在字符数组中,应包含结束符

charstr[]={'C','','p','r','o','m','g','r','a','m','\0'}; printf("%s\n\n",str);下列情况可能输出不可识别字符(乱码)

charstr1[]={'C','','p','r','o','m','g','r','a','m'}; printf("%s\n\n",str1);30数据的组织结构--字符串、二维数组共53页,您现在浏览的是第30页!程序段:逐个从键盘接受一个字符串并打印。charstr[20];inti=0;while(1){ /*输入回车后结束*/if((str[i++]=getchar())==‘\n’)break;}str[i-1]=‘\0’; //人为地添加字符串的结束符printf(“%s”,str);//用“\0”替换了“\n”31数据的组织结构--字符串、二维数组共53页,您现在浏览的是第31页!【例】字符串的输入输出示例。#include<stdio.h>main(){chara[10],b[10];gets(a);scanf(“%s”,b);puts(a);printf(“%s\n”,b);}

必须开辟足够大的空间

运行结果:SitdownSitdownSitdownSit

遇空格、跳格符或回车符,认为字符串输入结束

%sgets(),puts()在stdio.h中。基于一维数组的字符串操作字符串的输入输出32数据的组织结构--字符串、二维数组共53页,您现在浏览的是第32页!输出字符串(整体输出)将字符串的内容显示到标准输出设备——屏幕上标准函数

printf(“%s”,str);/*只有输出,不换行*/puts(str);/*输出并换行*/其中str是存放字符串的数组名称,定义:charstr[20];str所指的字符串必须用‘\0’结束puts()输出后,自动换行scanf()输出后,要人为添加换行符“\n”33数据的组织结构--字符串、二维数组共53页,您现在浏览的是第33页!字符串标准函数在C语言的标准函数库中,提供了数十种与字符串处理有关的标准函数,从而大大地提高了字符串处理的能力,降低了字符串处理的复杂程度。

常用字符串标准函数及应用实例

34数据的组织结构--字符串、二维数组共53页,您现在浏览的是第34页!大小写转换

strlwr(str);--所有大写字母转换成小写字母strupr(str);--所有小写字母转换成大写字母函数原型都在string.h中实例:统计一段文本中每个英文字母出现的次数(小写都被认为是大写)。教材P101例4-935数据的组织结构--字符串、二维数组共53页,您现在浏览的是第35页!计算字符串长度

strlen(str);--返回字符串中所包含的字符个数,即字符串长度,‘\0’不计算在内。

字符串比较

strcmp(str1,str2);--比较字符串str1与str2的大小

若str1==str2函数返回值=0若str1>str2函数返回值>0若str1<str2函数返回值<0比较时将依据每个字符对应的ASCII编码决定其大小从左边的字符开始比较同位置的字符,直到出现不同的字符,此时,字符大者,则字符串大例“ABCD”<“ABD”“ABCD”>“ABC”“ABCD”==“ABCD”字符串处理函数36数据的组织结构--字符串、二维数组共53页,您现在浏览的是第36页!#include<stdio.h>#include<string.h>main(){charpassword[20]; /*存放用户输入的密码*/printf("\nEnterpassword:");gets(password); /*输入密码*/

/*检测用户输入的密码,如果不正确,给出提示,并请求重新输入*/while(strcmp(password,"administrators")!=0){printf("\nInvalidpassword\n\n");printf("Enterpassword,again:");gets(password);}printf("OK");/*输入正确,显示"OK"*/}程序代码问题:要限制密码输入的次数(3次),应如何修改37数据的组织结构--字符串、二维数组共53页,您现在浏览的是第37页!#include<stdio.h>#include<string.h>main(){ charstr[80],maxstr[80]; intmax=0,len; do{ printf("Enterastring:"); gets(str); len=strlen(str); if(len>max){ strcpy(maxstr,str); max=len; } }while(len>0); printf("Themaxstringis%s\n",maxstr);}38数据的组织结构--字符串、二维数组共53页,您现在浏览的是第38页!#include<stdio.h>#include<string.h>main(){charstr1[80]="Thisisa";charstr2[]="program.";charstr3[]="Java";charstr4[]="Pascal";charstr5[]="C";charstr6[]="C++";intchoice;printf("\n===MENU==\n");/*菜单*/printf("\nJava................1");printf("\nPascal.............2");printf("\nC....................3");printf("\nC++................4");printf("\nchoice:");scanf("%d",&choice);/*用户做出选择*/程序代码只给出部分初值39数据的组织结构--字符串、二维数组共53页,您现在浏览的是第39页!文本变换例4-12:文本加密、解密有规律地改变文本中字符的ASCII码,达到加密的目的阅读时,以相反的规律改变文本中字符的ASCII码,达到解密的目的40数据的组织结构--字符串、二维数组共53页,您现在浏览的是第40页!求子串函数

strstr(str1,str2);str1是主串,str2是子串若在str1中存在子串str2,则返回子串str2在主串中次出现(个字符)的位置(指针);否则返回空在字串中找字符出现位置的函数strchr(str1,ch);str1是一个给定的字符串,ch是所要查找的字符若在str1中存在字符ch,则返回ch在字符串str1中次出现的位置(指针);否则返回空

41数据的组织结构--字符串、二维数组共53页,您现在浏览的是第41页!二维数组的存储a[1][2]a[1][1]a[1][0]a[0][2]a[0][1]a[0][0]a[2][0]a[2][1]a[2][2]a[0][3]a[1][3]a[2][3]例如:inta[3][4];数据表示共12个元素

所占存储空间大小(即字节数):

sizeof(元素类型)×元素数量(即行数×列数)内存状态:先行后列a[2][3]a[2][2]a[2][1]a[2][0]a[1][3]a[1][2]a[1][1]a[1][0]a[0][3]a[0][2]a[0][1]a[0][0]第0行第1行第2行42数据的组织结构--字符串、二维数组共53页,您现在浏览的是第42页!二维数组的引用赋值

inta[2][3];a[0][0]=1a[0][1]=1a[0][2]=1a[1][0]=1a[1][1]=1a[1][2]=1for(i=0;i<2;i++)for(j=0;j<3;j++)a[i][j]=1;输入for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);输出for(i=0;i<2;i++)for(j=0;j<3;j++)printf(“%d”,a[i][j]);

printf(“\n”);

{

}43数据的组织结构--字符串、二维数组共53页,您现在浏览的是第43页!例:判定给定方阵是否为对称矩阵每个元素都应满足array[i][j]==array[j][i]判断对称性,只需用下三角的每个元素与对应的上三角元素进行比较1234521234321234321254321教材P109例4-1344数据的组织结构--字符串、二维数组共53页,您现在浏览的是第44页!/*判断矩阵是否对称并输出相应的结果*/for(i=0;i<NUM;i++)for(j=0;j<i;j++) if(m[i][j]!=m[j][i]){ printf("\nThematrixisn'tsymmetrical."); return0; }printf("\nThematrixissymmetrical.");}45数据的组织结构--字符串、二维数组共53页,您现在浏览的是第45页!P120第7题提示设单词之间用空格(可以有多个)或回车符(可以有多个)隔开跳过前导空格(也可不考虑)循环开始(结束条件:遇到‘\0’)若字符是非空格或回车,则累加字符个数(单词长度),否则,表示前面是一个单词,记录当前最长单词的长度找到后面个非空格、回车的字符,则可能是下一个单词的开始46数据的组织结构--字符串、二维数组共53页,您现在浏览的是第46页!#include<stdio.h>#include<string.h>

main(){chara[80];intcount;gets(a);count=strlen(a);printf("%s:%d\n",a,count);}运行结果:IamOKIamOK:7问:strlen(“Good”)的值?

【例1_1】求字符串长度函数的使用。47数据的组织结构--字符串、二维数组共53页,您现在浏览的是第47页!#include<stdio.h>#include<string.h>main(){

温馨提示

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

评论

0/150

提交评论