C++中的C风格字符串

C++中的C风格字符串

字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种来自C语言,常被称为C-风格字符串(C-stylestring)。本章将首先介绍它,然后介绍另一种基于 string 类库的方法。

存储在连续字节中的一系列字符意味着可以将字符串存储在 char 数组中,其中每个字符都位千自己的数组元素中。字符串提供了一种存储文本信息的便捷方式,如提供给用户的消息(“请告诉我您的瑞士银行账号”)或来自用户的响应(“您肯定在开玩笑”)。C-风格字符串具有一种特殊的性质:以空字符(null character)结尾,空字符被写作\0,其ASCI码为0,用来标记字符串的结尾。例如,请看下面两个声明:

char dog[8]={b','e','a','u',"x',"",'I','I'}; // not a string!
char cat[8]={'f',a',t',e','s','s','a','\0'}; // a string!

这两个数组都是 char 数组,但只有第二个数组是字符串。空字符对 C-风格字符串而言至关重要。例如,C++有很多处理字符串的函数,其中包括cout 使用的那些函数。它们都逐个地处理字符串中的字符,直到到达空字符为止。如果使用 cout显示上面的 cat 这样的字符串,则将显示前7个字符,发现空字符后停止。但是,如果使用cout 显示上面的 dg数组(它不是字符串),cout将打印出数组中的8个字母,并接着将内存中随后的各个字节解释为要打印的字符,直到遇到空字符为止。由于空字符(实际上是被设置为0的字节)在内存中很常见,因此这一过程将很快停止。但尽管如此,还是不应将不是字符串的字符数组当作字符串来处理。
在cat 数组示例中,将数组初始化为字符串的工作看上去冗长乏味–使用大量单引号,且必须记住加上空字符。不必担心,有一种更好的、将字符数组初始化为字符串的方法–只需使用一个用引号括起的字符串即可,这种字符串被称为字符串常量(stringconstant)或字符串字面值(stringliteral),如下所示:

char bird[11]="Mr. Cheeps";// the o is understood
char fish[]= "Bubbles" ;//let the compiler count

用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它(参见图4.2)。另外,各种C++输入工具通过键盘输入,将字符串读入到char 数组中时,将自动加上结尾的空字符(如果在运行程序清单 4.1中的程序时发现,必须使用关键字static 来初始化数组,则初始化上述char 数组时也必须使用该关键字)。
当然,应确保数组足够大,能够存储字符串中所有字符–包括空字符。使用字符串常量初始化字符数组是这样的一种情况,即让编译器计算元素数目更为安全。让数组比字符串长没有什么害处,只是会浪费一些空间而已。这是因为处理字符串的函数根据空字符的位置,而不是数组长度来进行处理。C++对字符串长度没有限制。

在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。

对C++感兴趣的朋友点这里:C/C++课程

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值