a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 71|回复: 1

[程序员] 2012年软件水平考试程序员之程序设计知识要点(16)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
 4.3 字符数组和字符串1.字符数组
% o  k+ W! J6 g$ m: P1 e+ ~  如不美观数组的元素类型是字符型(char),则此数组就是字符数组。字符数组的每个元素只能存放一个字符( 存放字符的ASCII代码)。6 l' ?% _1 H' V& |
  字符数组的界说形式与其它数组的界说形式一样:! N3 y2 X" S4 m
  char字符数组名[元素个数];7 X( |: L; J* f6 p  M7 v( V
  例如:
7 r: O5 a# E2 Z. ~6 {  char S[5];
. n. J/ H+ [8 B4 `. c  暗示数组S有五个元素,每个元素能存放一个字符,整个数组最多可存放五个字符。字符数组元素的引用体例也与通俗数组元素的引用体例不异。
8 x! ?5 X+ n1 X9 F8 C( p& r5 X8 ~; }  字符数组也可与通俗数组一样的初始化,字符数组也可操作字符串常量给字符数组初始化。例如:, |/ [2 }4 H6 w) g8 x
  char aStr[]={“12345”};
# \. z# h. w! h' ]  并可省略花括弧,简单地写为:
. ^- o# Z2 D) p* ~0 Z9 @7 `$ \/ P  char aStr[]=“ 12345” ;3 e% K0 d* @4 E
  注重:字符数组aStr[]的元素有六个,不是五个。用字符串常量对字符数组初始化,C系统会在字符列末尾添加一个字符串竣事符。
+ c( V, s: [. U/ w2.字符串
( Y$ I7 V' K. i  称最后有字符率竣事符‘\0’的字符序列为字符串。字符数组中存储的字符序列自己并不要求最后必然要有字符‘\0’。但当字符数组内存储的内容需要作为字符串时,就必需要有标识表记标帜符‘\’。当字符数组内存储的是字符串时,可用“%s”名目输出,若是通俗的字符序列,则它不能用名目“%s”输出,而只能连系轮回用名目“%c”输出。9 X8 e- O" N# x( ^9 c5 g
  指定元素个数的字符数组用字符串常量给它初始化时,其元素个数不能小于字符串常量的字符数,但数组的元素个数可以等于字符串常量的字符数。例如:
0 v, t1 b7 G; y+ x! X1 H! N+ X, p  char ss[3]=“abc”;
& K3 f2 O5 z  M  则, ss[0]=‘a’,ss[l]=‘b’, ss[2]=‘c’。此时,字符数组ss中存储的是字符序列,不是字符串。/ y0 i0 ]1 |  d
  字符率竣事标识表记标帜符的代码是8位全0,称为空字符,轨范用‘\0’来标识表记标帜。字符串的竣事标识表记标帜符紧接在字符串的有用字符列之后。例如,一个有8个有用字符的字符串,其长度为8个字符,但在它的第九个位置存有竣事标识表记标帜符‘\0’。
) M8 Q% Y0 n, O& p1 }0 ~2 R3 F  请读者注重以下几点:
9 H; S: ^, }  K; g" V  (1)字符率与存储字符串的字符数组有区别。字符率的有用字符是指概缦悝指位置的第一个字符起头至字符串竣事标识表记标帜符之前的那些字符。名目符“%s”只输出字符串的有用字符,而不会再继续输出字符率竣事标识表记标帜符及其之后的字符。例如:' _. T' {  l# w$ b
  char str[50]=“Pas\0cal Cobol Fortran C”;
# I/ u' E' _/ X: ~% q& h: C. i( b1 d5 l  printf(“%s\n”,str);5 u" J0 C9 g/ m! `# {
  将只输出:
! t7 h) B+ E" v- U. g+ H6 H  Pas
3 Y1 k+ Y6 U" l6 v- U  而现实上,数组str[]字符率竣事符之后还存有其它良多字符。
% ^. x8 f$ x% B( ~6 G0 Z+ S3 H- u  (2)用“%s”名目输出字符串时,不搜罗字符串竣事标识表记标帜符。对应的输出项是字符串或字符串名。字符数组名可作为字符串名。对于上例,写成:
6 O% u: s& f$ R  printf(“%s”,s[0]);5 k1 K8 }& e$ d% q
  是错误的。因s[0]是数组s的元素,是一个字符,不是字符串。
* {- x' k! [8 r! g  M  (3)在挪用scanf()为字符数组输入字符串时,输入项是数组名,不要加地址运算符&。. }& i8 y. ], k7 V* j
  (4)若用“%c”名目连系轮回输入字符序列,若轨范又想将输入的字符序列组成字符串,则轨范必需用赋值语句在字符列之后存入字符串竣事标识表记标帜符,使其酿成字符串。3 u% b# M: g* K0 L: J8 k
  轨范经常要措置许良多多的字符串,如存储礼拜的名称。同时存储众多字符串的一个实现体例是界说一个二维字符数组,让二维数组的每一行存储一个字符串。这样做,要求数组每行元素个数应比可能最长的字符串字符个数还要多1个。如下面的示例所示:5 E  ~3 y$ M& ?1 _" f
  char weekDay[][9]= {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “ Friday”, “Saturday”};) {( ?$ c' `) E& L3 t2 x. N
2 m- p2 t0 l/ ]0 P. V- `
  在C轨范中,存储多个字符串更好的体例是用指针数组。
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

2012年软件水平考试程序员之程序设计知识要点(16)

</p>3.常用字符串库函数 2 O: A+ T0 q9 o
  求字符串长度函数strlen()( ~8 O6 e3 U9 o/ \
  函数挪用 strlen(str)返回str中的有用字符(不搜罗‘\0’)的个数。
" a  I) A" R1 K% V4 R/ Z& `1 d  字符串拷贝函数strcpy()! e! m( U) F# r8 k  g
  函数挪用Strcpy(strl,str2)将字符串str2拷贝到字符数组strl。要求字符数组strl足够大,以便能容纳被拷贝的str2的全数内容。
' u% g. D8 i8 E  限制字符数的字符串拷贝函数strncpy()
) _" M+ m% N+ \, N) W" a+ Z. F  函数挪用strncpy(strl,str2,n)的浸染是将str2中的前n个字符拷贝到strl(并附加‘\0’)。其中n是整型表达式,指明欲拷贝的字符个数。如不美观str2中的字符个数不多于n,则函数挪用strncpy(strl,str2,n)等价于strcpy(strl,str2)。4 e. U; M) K! C8 }
  字符串毗连函数strcat()
" x8 {, m/ v( v6 {  函数挪用strcat(strl,str2)将str2内容拷贝接在字符数组strl中的字符串的后面。要求字符数组strl必需足够大,以便还能容纳str2的内容。该函数挪用返回strl的起头地址。注重:字符串毗连前,strl和str2都各自有‘\0’,毗连后,strl中原本的‘\0’在拷贝时被笼盖失踪,而在新的字符率有用字符之后再保留一个‘\0’。例如:0 O- W$ A4 @/ n% J
  char strl[30]=“Beijing”;9 N# \3 j) q2 n, a& J+ h$ ?, R5 {( l5 g
  char str2[30]=“ Shanghai”;
3 e# U; \; Z3 M  O( Y! m  函数挪用8 J9 U# m2 s, v
  strcat(strl,str2);% i6 n+ l3 a5 M# g& U
  printf(“%s \n”,strl);
& H# o5 _" S* \' m8 e  将输出:6 B) a* y/ H5 v
  BeijingShanghai
! ?+ R( _' H/ R* X8 {( K$ h  字符串斗劲函数strcmp()# v: E3 C9 b  Z7 d' A. _
  函数挪用strcmp(strl,str2)批较两个字符串的巨细,对两个字符串自左至右逐对字符对角力计较(按字符的 ASCII代码值的巨细),直至呈现分歧的字符或碰着‘\' 字符为止。如直至'\' 字符,全数字符都不异,则认为相等,函数返回0值;若呈现不不异的字符,则以这第一对不不异的字符斗劲结不美观为准,若strl的阿谁不不异字符小于str2的响应字符,函数返回一个负整数;反之,返回一个正整数。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 16:14 , Processed in 0.663703 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表