C语言ch063字符数组_第1页
C语言ch063字符数组_第2页
C语言ch063字符数组_第3页
C语言ch063字符数组_第4页
C语言ch063字符数组_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

2023/2/61上一节我们学到了二维数组的声明、初始化、赋值和引用基本的矩阵运算选择法排序首先从0到n-1个元素中选出关键字最小的记录交换到第0个位置上。然后再从第1到n个元素中选出次小的记录交换到第1个位置上,依次类推。[3

5281]第1趟

1

[5283]

第2趟

12

[583]

第3趟1

2

3[85]

第4趟1

2

3

5[8]

选择法排序(程序段)for

(i

=0;i<n-1;i++)//第i趟排序,将

a[i~n-1]中的最小值与a[i]交换{

min_idx=i;

for

(j

=i+1;j<n;j++)//min_idx是a[i~n-1]中最小值下标

if

(a[j]<a[min_idx])

min_idx

=j;

//a[min_idx]<->a[i]

temp=a[min_idx];

a[min_idx]=a[i];

a[i]=temp;}Entern:5Enter5integers:35281Aftersorted:123582023/2/646.1怎样定义和引用一维数组6.2怎样定义和引用二维数组6.3字符数组内容Contents2023/2/656.3字符数组6.3.1

怎样定义字符数组6.3.2

字符数组的初始化6.3.3

怎样引用字符数组中的元素6.3.4

字符串和字符串结束标志6.3.5字符数组的输入输出6.3.6

善于使用字符串处理函数6.3.7

字符数组应用举例6.3.1怎样定义字符数组charc[10];c[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';2023/2/66Iam

happyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]6.3.2字符数组的初始化charc[10]={'c','','p','r','o','g','r','a','m'};如初值个数小于数组长度,剩余元素自动设为'\0

'2023/2/67cprogram\0c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]6.3.2字符数组的初始化

chardiamond[5][5]={ {'','','*'}, {'','*','','*'}, {'*','','','','*'}, {'','*','','*'}, {'','','*'} };2023/2/686.3.3怎样引用字符数组中的元素例6.6输出一个已知的字符串。解题思路:定义一个字符数组,并用"初始化列表"对其赋以初值用循环逐个输出此字符数组中的字符2023/2/692023/2/610charc[15]

=

{'I','','a','m','','a',

'','s','t','u','d','e','n','t','.'};inti;for

(i

=

0;

i

<

15;

i++)

printf("%c",

c[i]);6.3.3怎样引用字符数组中的元素字符数组长度一定要足够6.3.3怎样引用字符数组中的元素例6.7输出一个菱形图。解题思路:定义一个字符型的二维数组,用"初始化列表"进行初始化用嵌套的for循环输出字符数组中的所有元素。2023/2/6112023/2/612chardiamond[][5]={

{'','','*'},

{'','*','','*'},

{'*','','','','*'},

{'','*','','*'},

{'','','*'}};inti,

j;for(i=0;

i<5;

i++){

for(j=0;

j<5;

j++)

putchar(diamond[i][j]);

printf("\n");}字符串常量(stringliteral)用一对双引号括起来的字符序列,隐含结束符'\0'"Happy"6个字符'H''a''p''p''y''\0'2023/2/613有效字符字符串结束符字符串的长度:有效字符的个数,不包括'\0'字符串的表示C语言中,用字符数组存储字符串以'\0'结尾的字符数组'\0'代表ASCII码为0的字符,仅仅是一个结束标志charc[10]=“Ritchie”;Q:如果这个字符数组用来表示字符串,则最多能存放多少个字符的字符串?9个,因为还要留一个位置给'\0'注意:字符数组长度和字符串长度的区别2023/2/6146.3.4字符数组的初始化charc[10]={"China"};也可简写成charc[10]="China";从c[5]开始,元素值均为'\0'2023/2/615China\0\0\0\0\0初始化时数组长度可省略charc[]="Iamhappy";相当于charc[11]="Iamhappy";2023/2/616单选题下列对字符串的定义中,错误的是哪一个?A)charstr[10]="CLanguage";B)charstr[]="CLanguage";C)char*str="CLanguage";D)charstr[]={'C','','L','a','n','g','u','a','g','e',0};下列能正确定义字符串的语句是(

)。A)charstr[]={'\064'};B)charstr="kx43";C)charstr=";D)charstr[]="\0";2023/2/617DA6.3.5字符数组的输入char

s[10];

scanf("%s",

s);China↙数组名s前没有&,因为数组名对应数组首地址输入遇到空白字符(空格、tab、回车)结束,把空白字符之前的字符赋值给字符数组,系统自动在空白字符之前的最后一个字符后面加一个'\0'输入:howareyous:输入的字符串应短于已定义的字符数组的长度若等于或大于,不检查边界,会引起不确定的行为,演示2023/2/618how\0?

?????6.3.5字符数组的输出char

s[10]={"China"};printf("%s",s);如果一个字符数组中包含多个'\0',则遇第一个'\0'时输出就结束输出的字符中不包括结束符'\0'2023/2/619ctype.h字符测试函数intisalpha(intch);ch是英文字母返回1,否则返回0intisalnum(intch);检查ch是否是字母或数字…字符映射函数inttoupper(intch);inttolower(intch);2023/2/6206.3.6善于使用字符串处理函数在C函数库中提供了一些用来专门处理字符串的函数stdio.hputsgetsstring.hstrcatstrcpy和strncpystrcmpstrlenstrlwrstrupr21puts(字符数组名)作用是将一个字符串输出到终端,遇到'\0'时输出结束 char

str[20]="China"; puts(str);

输出China2023/2/6221.puts函数----输出字符串chars[10];scanf("%s",s);printf("%s",s);2023/2/623若输入:howareyou则输出?2.gets函数----输入字符串gets(字符数组名)作用是输入一个字符序列到字符数组,直到遇到一个换行符‘\n’,并自动在最后一个字符后添加一个'\0‘输入错误或到文件尾时,返回NULL,即0。而scanf返回的是EOF,即-1。charstr[20];

gets(str);howareyou↙2023/2/624/*name1.c--readsaname*/#include<stdio.h>#defineMAX81intmain(void){

charname[MAX];/*allotspace*/printf("Hi,what'syourname?\n");gets(name);/*placestringintonamearray*/printf("Nicename,%s.\n",name);

return0;}2023/2/6253.strcat函数----字符串连接strcat(字符数组1,字符串2)把字符串2拷贝到数组1的后面,结果放在字符数组1中,(覆盖dest结尾处的'\0')并添加'\0'例

charstr1[30]="hello";

charstr2[]="world";

strcat(str1,str2);

strcat(str1,“!”);printf("%s",str1);

输出:helloworld!2023/2/626str1要足够大4.strcpy-字符串复制strcpy(字符数组1,字符串2)将串2(包括串后的一个'\0')复制到数组1中charstr1[10],str2[]="China";strcpy(str1,str2);//strcpy(str1,“China”);第二个参数是串常量也可2023/2/627China\0\0\0\0\0str1str1要足够大charstr1[10],str2[]="China";str1="China";错误str1=str2;错误2023/2/628字符串复制必须用strcpystrcpy_s2023/2/629msdn上的函数原型说明errno_tstrcpy_s(

char*strDestination,//目标串size_t

numberOfElements,//目标串的缓冲区大小,一般设置为目标串的大小

constchar*strSource//源串);4.strncpy函数-字符串复制strncpy(str1,str2,intn);将str2中前n个字符复制到str1的前n个字符strncpy(str1,str2,2);将str2中前2个字符复制到str1中,取代str1中原有的前2个字符注意不会自动复制‘\0’,有时需要手动添加charstr1[10],str2[]="China";strncpy(str1,str2,5);str1[5]='\0';2023/2/6305.strcmp函数----字符串比较strcmp(字符串1,字符串2)比较规则将两个串自左至右逐个字符比较,如遇到\0,即全部字符相同,认为两个字符串相等如果出现不同的字符,则以第一对不同字符的字典序(ASCII码数值大小)比较结果为准ASCII码值越大,我们认为字符越大串1>串2返回值>0,相等返回0,否组返回值<0strcmp("China","Korea");strcmp(str1,str2);strcmp(str1,"Beijing");2023/2/6315.strcmp函数----字符串比较比较的结果由函数返回值带回如果字符串1=字符串2,则函数值为0如果字符串1>字符串2,则函数值为一个正整数如果字符串1<字符串2,则函数值为一个负整数"A"<"B""a">"A""computer">"compare""these">"that""1A">"$20""CHINA">"CANADA""DOG"<"cat""Tsinghua">"TSINGHUA"2023/2/632#include<stdio.h>#include<string.h>intmain(){

charkey[]="apple";

charbuffer[80];

do{

printf("Guessmyfavoritefruit?");

fflush(stdout);

scanf("%s",buffer);

}while(strcmp(key,buffer)!=0);

puts("Correctanswer!");

return0;}335.strcmp函数----字符串比较if(str1>str2)printf("yes");错误if(strcmp(str1,str2)>0)printf("yes");正确2023/2/6346.strlen函数----字符串长度strlen(字符数组)函数的返回值为字符串中的实际长度,不包括'\0'charstr[10]="China";printf("%d",strlen(str));输出结果是5也可以直接测试字符串常量的长度strlen("China");2023/2/6357.strlwr函数----转换为小写strlwr(字符串)作用是将字符串中大写字母换成小写字母2023/2/6368.strupr函数----转换为大写strupr(字符串)作用是将字符串中小写字母换成大写字母2023/2/637例6.8输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。解题思路:问题的关键是怎样确定"出现一个新单词了"如果当前字符为非空格,而它前一字符是空格,则表示"新的单词开始了",此时使num累加12023/2/638分析出所有四种情况当前字符上一字符numisspace空格空格不变1空格非空格不变1非空格空格num++0非空格非空格不变02023/2/639Q:isspace和num的初值?1,0Q:如何判断当前字符是否空格?string[i]=='

'Q:如何判断上一字符是否空格?isspace

==1charstring[81];inti;intnum=0;//单词个数intisspace=1;//前一字符是否空格。0表示不是空格,1表示是空格。gets(string);for(i=0;string[i]!='\0';++i){

//前一字符空格,当前字符不是空格if(string[i]!=‘’&&1==isspace)

++num;if(string[i]!='')

isspace=0;

else

iss

温馨提示

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

评论

0/150

提交评论