正文

C++ 入门 第5章   5.5.3 字符串和字符串结束标志2008-09-23 10:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38457.html

分享到:

  用一个字符数组可以存放一个字符串中的字符。如 char str[12]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′}; 用一维字符数组str来存放一个字符串″I am happy″中的字符。字符串的实际长度(10)与数组长度(12)不相等,在存放上面10个字符之外,系统对字符数组最后两元素自动填补空字符′\0′。 为了测定字符串的实际长度,C++规定了一个“字符串结束标志”,以字符′\0′代表。在上面的数组中,第11个字符为′\0′,就表明字符串的有效字符为其前面的10个字符。也就是说,遇到字符′\0′就表示字符串到此结束,由它前面的字符组成字符串。   对一个字符串常量,系统会自动在所有字符的后面加一个′\0′作为结束符。例如字符串″I am happy″共有10个字符,但在内存中它共占11个字节,最后一个字节′\0′是由系统自动加上的。 在程序中往往依靠检测′\0′的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的长度。 说明: ′\0′只是一个供辨别的标志。 如果用以下语句输出一个字符串: cout<<″ How do you do?″;   系统在执行此语句时逐个地输出字符,那么它怎么判断应该输出到哪个字符就停止了呢? 下面再对字符数组初始化补充一种方法: 用字符串常量来初始化字符数组。例如 char str[]={″I  am  happy″}; 也可以省略花括号,直接写成 char str[]=″I am happy″; 不是用单个字符作为初值,而是用一个字符串(注意字符串的两端是用双撇号而不是单撇号括起来的)作为初值。显然,这种方法直观,方便,符合人们的习惯。注意: 数组str的长度不是10,而是11(因为字符串常量的最后由系统加上一个′\0′)。因此,上面的初始化与下面的初始化等价: char str[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′,′\0′};   而不与下面的等价: char str[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′}; 前者的长度为11,后者的长度为10。如果有 char str[10]=″China″; 数组str的前5个元素为′C′,′h′,′i′,′n′,′a′,第6个元素为′\0′,后4个元素为空字符。见图5.8。   需要说明的是:字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′。如以下这样写完全是合法的: char str[5]={′C′,′h′,′i′,′n′,′a′}; 是否需要加′\0′,完全根据需要决定。但是由于C++编译系统对字符串常量自动加一个′\0′。因此,人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中有效字符的后面也人为地加上一个′\0′。如 char str [6]={′C′,′h′,′i′,′n′,′a′,′\0′};

阅读(2855) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册