C程序设计课件4.2_第1页
C程序设计课件4.2_第2页
C程序设计课件4.2_第3页
C程序设计课件4.2_第4页
C程序设计课件4.2_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1.一维字符数组的定义

一维字符型数组定义的一般形式

char数组名[常量表达式]

如:charstr[6];定义了一个一维字符数组,数组名str,数组有6个元素,分别为:str[0],str[1],str[2],str[3],str[4],str[5]。

字符数组中的一个元素存放一个字符

如:字符数组str最多存放6个字符。一、一维字符数组的定义和初始化2.一维字符数组的初始化

如:charstr[5]={'H','e','l','l','o'};charstr[]={'H','e','l','l','o'};Hellostr[0]str[1]str[2]str[3]str[4]如:charstr[7]={'H','e','l','l','o'};②部分元素初始化(此时长度不能省略)

赋值给前面的元素,没被赋值的数组元素值为'\0'Hello\0\0str[0]str[1]str[2]str[3]str[4]str[5]str[6]①全部元素初始化(此时长度可以省略)(1)用字符常量初始化(2)用字符串常量初始化如:charstr[6]={"Hello"};charstr[]={"Hello"};charstr[]="Hello";①全部元素初始化(此时长度可以省略)Hello\0str[0]str[1]str[2]str[3]str[4]str[5]②部分元素初始化(此时长度不能省略)等价于:charstr[7]={'H','e','l','l','o'}charstr[7]={'H','e','l','l','o'

,'\0'

,'\0'};

如:charstr[7]="Hello";Hello\0\0str[0]str[1]str[2]str[3]str[4]str[5]str[6]赋值给前面的元素,没被赋值的数组元素值为'\0'

数组长度至少要比字符串的长度多1,用于存放'\0'

功能:将从str开始到第一个'\0'之间的字符串输出到终端(一般指显示器),并将'\0'转换为回车换行。1.字符串输出函数(puts())一般调用格式

puts(str)其中,参数str可以是地址表达式(一般为数组名或指针变量),也可以是字符串常量。二、字符数组的输入和输出(1)输出的字符串中可以包含转义字符。(2)输出到第一个'\0'为止,并将'\0'转换为'\n'。(3)一次只能输出一个字符串。返回值:成功,返回换行符(ASCII为10);失败,返回EOF(-1)说明#include"stdio.h"voidmain(){charstr1[]="china";charstr2[]="china\nliaoning\0jinzhou";char*p=str2+6;puts(str1);puts(str1+2);puts("Hello");puts(str2);

puts(p);}运行结果chinainaHellochinaliaoningliaoning程序1☞【例】写出下面程序的运行结果/*到第1个\0结束*/一般调用格式

gets(str)其中,参数str是地址表达式,一般是数组名或指针变量。功能:从终端(一般指键盘)输入一个字符串,存放到以str为起始地址的内存单元。如:charstr[20];gets(str);返回值:字符串在内存中存放的起始地址,即str的值2.字符串输入函数(gets())说明①gets()函数一次只能输入一个字符串。②系统自动在字符串尾加字符串结束标志'\0'。③遇回车输入结束。3.字符数组的输出(1)单个字符输出①用格式输出函数printf()的%c的格式。

②用字符输出函数putchar()。#include<stdio.h>voidmain(){charstr[81]="string";inti;for(i=0;str[i]!='\0';i++)

printf("%c",str[i]);}putchar(str[i]);程序2☞【例】编写程序输出字符串str的内容。说明(2)将整个字符串一次输出

①用格式输出函数printf()的%s格式。

②用字符串输出函数puts()。#include<stdio.h>voidmain(){charstr[81]="string";

printf("%s",str);}puts(str);②两个函数都是输出到第一个'\0'结束。程序3☞【例】编写程序输出字符串str的内容。①两个函数的输出项参数都是地址表达式或字符串常量。③puts()函数输出后换行,printf()函数输出后不换行。#include<stdio.h>voidmain(){charstr[81];inti=0;printf("请输入一组英文字母:");

str[i]=getchar();while(

str[i]!='\n'

){

}}if(str[i]>='a'&&str[i]<='z')

str[i]

-=32;putchar(str[i]);str[++i]=getchar();4.字符数组的输入(1)单个字符输入

①用格式输入函数scanf()的%c格式。②用字符输入函数getchar()。【例】将读入的一组英文字母按大写输出,按回车输入结束。程序4☞scanf("%c",&str[i]);scanf("%c",&str[++i]);#include<stdio.h>voidmain(){charstr[81];

inti=0;printf("请输入一组英文字母:");

gets(str);while(

str[i]!='\0'

){

}

puts(str);

}(2)将整个字符串一次输入①用格式输入函数scanf()的%s格式。

②用字符串输入函数gets()。scanf("%s",str1);【例】将读入的一组英文字母按大写输出,按回车输入结束。if(str[i]>='a'&&str[i]<='z')

str[i]

-=32;i++;程序5☞charstr1[12];gets(str1);printf("%s",str1);输入:howareyou↙输出:howareyou如:charstr1[12];scanf("%s",str1);printf("%s",str1);输入:howareyou↙输出:how①scanf()不能输入含有空格的字符串gets()函数能够输入含有空格的字符串程序6☞②用scanf()函数一次能输入多个字符串用gets()函数一次只能输入一个字符串如:charstr1[4],str2[4],str3[4];scanf("%s%s%s",str1,str2,str3);printf("%s\n%s\n%s",str1,str2,str3);输入:howareyou↙输出:howareyou程序7☞how\0are\0you\0str1str2str3三、用字符数组实现字符串1.下标法引用(数组名[表达式])【例】将一个字符串逆置后接到原串的后面。#include"stdio.h"voidmain(){charstr[10];inti,j;gets(str);i=0;while(str[i]!='\0')i++;j=i;i--;

while(i>=0){str[j]=str[i];i--;j++;}

str[j]=

'\0';puts(str);}0123456789abca\0\0bcij程序8☞/*输入*//*逆置连接*//*输出*/2.用数组名法引用(*(数组名+表达式))【例】将字符数组a中的字符串复制到字符数组b。#include<stdio.h>voidmain(){chara[81],b[81];inti;gets(a);i=0;while(a[i]!=

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

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

'\0')程序9☞/*输入*//*复制*//*输出*/数组名法3.用指针变量法引用(*(指针变量+表达式))【例】删除字符串尾部空格。ab□c□□deg□□□□\0

ab□c□□deg\0#include"stdio.h"voidmain(){charstr[81],*p;gets(str);

/*从头开始找最后一个字符*/p=str;while(*p)p++;p--;/*从尾开始找左面第一个空格*/while(*p=='

')p--;p++;/*把左面第一个空格改成'\0'

*/*p='\0';printf("%s",str);}\0程序10☞p/*输入*//*删除尾部空格*//*输出*/一般形式

char*指针变量=字符串常量;

如:char*str="china";等价于:

char*str;str="china";str四、用字符指针变量实现字符串china\0含义:定义一个字符型指针变量str,并将字符串"china"的首地址赋给它,即str指向字符串的第一个字符'c'。#include<stdio.h>voidmain(){

puts(p1);

p1="hello";

puts(p1);}【例】写出下列程序的运行结果char*p1="china";运行结果p1china\0chinahellohello\0程序11☞字符数组和字符指针变量处理字符串的的区别

如:charstr[6]="china";字符数组

系统为字符数组分配连续内存空间,然后把字符串存入字符数组中。①存储内容不同如:char*p="china";字符指针变量将字符串的首地址赋给字符型指针变量。strchina\0pchina\0②允许的赋值操作不同如:(1)charstr[6];str="china";(2)char*str;str="china";/*数组名str是地址常量,不能做赋值运算*/若有定义:charstr1[10]="china",str2[10],*p1,*p2;判断下面四条赋值语句的合法性。①str2=str1;

②str2="USA";③p1=str1;

④p2="USA";/*str是字符指针变量,将字符串首地址赋给它*/思考题(×)(×)(√)(√)③使用字符指针变量比用字符数组节省内存④使用未赋值的指针变量是危险的如果指针变量在使用前没有赋值,其值不确定,使用时容易出错,严重时会造成系统瘫痪。如:char*p;scanf("%s",p);/*p没有赋值*/字符指针变量:

把字符串常量的地址赋给字符指针变量。strUSA\0字符数组:

将字符串常量复制到字符数组,字符串常量的地址与字符数组的地址不同。str如:charstr[]="USA";如:char*str="USA";USA\0USA\0China\01.字符串复制函数(strcpy())一般调用格式

strcpy(str1,str2)

其中,str2是地址表达式或字符串常量;str1是地址表达式

五、常用字符串处理函数使用时一定要在文件中写入文件包含命令:#include"string.h"或#include<string.h>功能:将字符串str2复制到以str1为起始地址的内存单元返回值:str1的值。如:charstr2[20]="China\0USA",str1[40];

strcpy(str1,str2);China\0USA\0str2str1①以str1开始的内存单元必须定义的足够大②复制从str2开始,到第一个'\0'结束③复制时连同字符串后面的'\0'一起复制④实现对字符数组整体赋值说明Beijing\0China\0Beijing\02.字符串连接函数(strcat())一般调用格式

strcat(str1,str2)其中,str1是地址表达式,str2是地址表达式或字符串常量如:charstr1[40]="China",str2[20]="Beijing";strcat(str1,str2);功能:把字符串str2连接到str1指向的字符串的后面返回值:str1的值。str1str2①以str1开始的内存单元必须定义的足够大。②str2的第一个字符覆盖了str1的第一个'\0',只在新串的最后保留一个'\0'。③str2指向的字符串不变。说明3.字符串比较函数(strcmp())一般调用格式

strcmp(str1,str2)其中,str1和str2可以是地址表达式,也可以是字符串常量返回值

TC:

相等,返回0;不相等,返回左起第一次不相同的两个字符的ASCII码的差值。

VC++:

相等,返回0;小于,返回-1;大于,返回1。功能:比较两个字符串是否相同China\0ChiNa\0≠China\0China\0=①字符串比较不能用关系运算符,只能用strcmp()函数②不能用strcmp()函数比较其他类型数据说明str1str2str1str24.求字符串长度函数(strlen())一般调用格式

strlen(str)其中,str可以是地址表达式,也可以是字符串常量。功能:统计从str开始到第1个'\0'之间字符数(不包括'\0')返回值:字符串中实际字符的个数函数strlen与运算符sizeof的区别?程序12☞思考题:#include"stdio.h"#include"string.h"voidmain(){charstr1[15]="china";charstr2[]="china\0usa";printf("%d\n",strlen(str1));printf("%d\n",strlen(str2));printf("%d\n",sizeof(str1));printf("%d\n",sizeof(str2));}【例】写出下列程序的运行结果运行结果5515105.字符串小写变大写函数(strupr())一般调用格式

strupr(str)其中,str可以是地址表达式,也可以是字符串常量。功能:将字符串中的小写英文字母转换成大写英文字母。返回值:str的值程序13☞6.字符串大写变小写函数(strlwr())一般调用格式

strlwr(str)其中,str可以是地址表达式,也可以是字符串常量。功能:将字符串中的大写英文字母转换成小写英文字母。返回值:str的值如:charstr1[]="#ab3CDE";charstr2[]="#ab3CDE";puts(strupr(str1));puts(strlwr(str2));#AB3CDE#ab3cde#include<stdio.h>#include<string.h>voidmain(){charstr1[20],str2[20],str3[60];gets(str1);gets(str2);if(strcmp(str1,str2)<0)/*str1小*/{

}else/*str2小*/{

}puts(str3);}【例】有两个字符串,按由小到大的顺序连接在一起并输出。

strcpy(str3,str2);strcat(str3,str1);strcpy(str3,str1);strcat(str3,str2);程序14☞/*输入*//*连接*//*输出*/练习题1.设有定义:chara[10]="ABCD",*p=a;,则*(p+4)的值是()。①"ABCD"②'D'③'\0'

④不确定一、单项选择题③2.设有定义:chars[12]="string";,则printf("%d",strlen(s));的输出结果是()。①6②7③11④12①3.若有如下定义,则正确的叙述为()。charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};①数组x和数组y等价②数组x和数组y的长度相同③数组x的长度大于数组y的长度④数组y的长度大于数组x的长度③4.以下语句或语句组中,能正确进行字符串赋值的是()。①char*sp;*sp="right!";②chars[10];s="right!";③chars[10];*s="right!";④char*sp="right!";④1.下列程序的功能是将一个字符串str的内容颠倒过来。

#include"stdio.h"

#include"string.h"voidmain(){inti,j,k;charstr[81];gets(str);for(i=0,j=

;i<j;i++,j--){k=str[i];str[i]=str[j];str[j]=k;}printf("%s\n",str);}strlen(str)-12.下列程序用以删除字符串中所有的空格。#include"stdio.h"voidmain(){chars[100]={"OurteacherteachClanguage!"};

inti,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!=''){

;j++;}

s[j]=

;printf("%s\n",s);}'\0's[j]=s[i]二、程序填空题3.程序功能是将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。#include<string.h>

#include"stdio.h"voidmain(){chara[]="clanguage",t;inti,j,k;k=strlen(a);

for(i=0;i<=k-2;i+=2)for(j=i+2;j<k;

)

if(

){t=a[i];a[i]=a[j];a[j]=t;}puts(a);}

j+=2a[i]>a[j]4.下列程序的功能是把

温馨提示

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

评论

0/150

提交评论