C++字符数组的输入输出和字符串结束标志使用讲解

所属分类: 软件编程 / C 语言 阅读数: 55
收藏 0 赞 0 分享

C++字符数组的输入输出
字符数组的输入输出可以有两种方法:
1) 逐个字符输入输出。

2) 将整个字符串一次输入或输出。例如有以下程序段:

  char str[20];
  cin>>str; //用字符数组名输入字符串
  cout<<str; //用字符数组名输出字符串


在运行时输入一个字符串,如:

  China↙


在内存中,数组str的状态如图5.9所示,在5个字符的后面自动加了一个结束符′\0′。


输出时,逐个输出字符直到遇结束符′\0′,就停止输出。输出结果为:

  China


如前所述,字符数组名str代表字符数组第一个元素的地址,执行“cout<<str;”的过程是从str所指向的数组第一个元素开始逐个输出字符,直到遇到′\0′为止。

关于字符数组的输入输出请注意以下几点:
输出的字符不包括结束符′\0′。
输出字符串时,cout流中用字符数组名,而不是数组元素名。
如果数组长度大于字符串实际长度,也只输出到遇′\0′结束。
如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。
用cin从键盘向计算机输入一个字符串时,从键盘输入的字符串应短于已定义的字符数组的长度,否则会出现问题。

C++提供了cin流中的getline函数,用于读入一行字符(或一行字符中前若干个字符),使用安全又方便。


C++字符串和字符串结束标志

用一个字符数组可以存放一个字符串中的字符。如:

  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个元素为空字符。见图。

需要说明的是:字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′。如以下这样写完全是合法的:

  char str[5]={'C','h','i','n','a'};


是否需要加′\0′,完全根据需要决定。但是由于C++编译系统对字符串常量自动加一个′\0′。因此,人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中有效字符的后面也人为地加上一个′\0′。如:

  char str [6]={'C','h','i','n','a','\0'};

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多