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

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'};
(0)

相关推荐

  • C++ 字符串去重排序实例代码

     C++ 字符串去重排序实例代码 入一个字符串,去掉重复出现的字符,并把剩余的字符串排序输出. 实现代码: #include <iostream> #include <string> using namespace std; void sort(string s) { char tmp[100]; int len=s.size(); int count=0,i,j; for (i=0;i<len;i++) { for (j=i+1;j<len;j++) { if (s[

  • c++中数字与字符串之间的转换方法(推荐)

    1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = str.c_str(); (2)char * -->string char *p = "OK"; string str(p); (3)char * -->CString char *p ="OK"; CString m_Str(p); //或者 CString m_Str; m_Str.Format(&q

  • C++中带空格字符串的输入问题解决

    前言 字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结. C++用cin输入的时候会忽略空格以后的字符,比如 char a[100]; cin>>a; C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hello": 如果用循环输入 for(int i=0;i<100;i++) { cin>>a[i]; } 这样输入100个数吗?或者定义

  • C++中字符串以及数组和指针的互相使用讲解

    C++字符串与指针 在C++中可以用3种方法访问一个字符串(在第5章介绍了前两种方法). 用字符数组存放一个字符串 [例]定义一个字符数组并初始化,然后输出其中的字符串. #include <iostream> using namespace std; int main( ) { char str[]="I love CHINA!"; cout<<str<<endl; return 0; } 运行时输出: I love CHINA! 用字符串变量存放

  • C++中输出十六进制形式的字符串

    前言 在进行 i18n 相关的开发时,经常遇到字符编码转换的错误.这时如果能把相关字符串用十六进制的形式打印出来,例如,"abc" 输出成 "\\x61\\x62\\x63" 这对于 i18n 的除错来说是很有帮助的.Python 里面,只需要使用 repr() 函数就行了.可在 C++ 中如何做到这点呢? 下面是用 ostream 的格式化功能的一个简单的实现: std::string get_raw_string(std::string const& s

  • C++实现从输入中读取字符串

    你可以用这种方式读取一个单独的以空格结束的词: #include<iostream> #include<string> using namespace std; int main(){ cout << "Please enter a word:\n"; string s; cin>>s; cout << "You entered " << s << '\n'; } 注意,这里没有显式

  • 深入解析C++中的字符数组和处理字符串的方法

    C++字符数组 用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符.字符数组具有数组的共同属性.由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数. 字符数组的定义和初始化 定义字符数组的方法与前面介绍的类似.例如: char c[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′; 上面定义了c为字符数组,包含10个元素.在赋值

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

    C++字符数组的输入输出 字符数组的输入输出可以有两种方法: 1) 逐个字符输入输出. 2) 将整个字符串一次输入或输出.例如有以下程序段: char str[20]; cin>>str; //用字符数组名输入字符串 cout<<str; //用字符数组名输出字符串 在运行时输入一个字符串,如: China 在内存中,数组str的状态如图5.9所示,在5个字符的后面自动加了一个结束符′\0′. 输出时,逐个输出字符直到遇结束符′\0′,就停止输出.输出结果为: China 如前所述

  • c语言字符数组与字符串的使用详解

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

  • 浅谈java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" aa.png,a2.png,a3.png"; String[] arrayStr =new String[]{}; arrayStr = str.split(","); 3.字符数组转list List list = java.util.Arrays.asList(array

  • C#实现char字符数组与字符串相互转换的方法

    本文实例讲述了C#实现char字符数组与字符串相互转换的方法.分享给大家供大家参考,具体如下: 一.字符串转换为字符数组 char[] tempChar = sourceString.ToCharArray(); 二.字符数组转换为字符串 //方法一 string str = string.Join("", tempChar); //方法二 string str = string.Concat<char>(tempChar); //方法三 string str = new

  • Java中char数组(字符数组)与字符串String类型的转换方法

    本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordField组件时,如果要获得密码值,就需要使用该组件的getPassword()方法.jPasswordField的getPassword()方法返回一个char类型的数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作.这时,就需要将char类型的数组进行转换.当然也经常会遇到

  • Java中字符数组和字符串与StringBuilder和字符串转换的讲解

    1.字符串->字符数组: String str = "abc": char[] a = str.toCharArray(); 记忆:字符串是个类,所以用内建函数 延伸: char b = str.charAt(1); str.length(); a.length; 2.字符数组->字符串: String str = String.valueOf(a): 记忆:类似强制类型转换格式,String(a) 延伸:字符转字符类 Character c = Character.val

  • java 字符串转化为字符数组的3种实现案例

    你可以选择最简单的方法解题,但是你需要掌握所有的方法当做知识储备第一种最简单,但是其适用前提是输入: 4(个数) 然后是 1 2 3 4 (也就是输入数字),放入kk数组之中,输出1 2 3 4 import java.util.*; public class Main { public static void main(String args[]) { Scanner cn=new Scanner(System.in); int count=cn.nextInt(); int []kk=new

  • C语言字符串替换:字符,字符串,字符数组详解

    目录 案例描述 案例分析 必备知识 1,字符数组 (1)字符数组的定义 (2)字符数组的初始化 2,字符串概念 (1)字符串的概念 (2)用字符初始化字符数组 (3)获取字符串的长度 3,字符串与指针 4,字符数组与字符指针 总结 案例描述 字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识.本案例要求通过编程实现字符串"Good moring"到"Good evening"的转换. 案例分析 我们需要从字符串中被替换的位置开始,将要替换的内容逐

  • C语言如何在字符数组中插入一个字符

    目录 在字符数组中插入一个字符 设计思路 问题思索 代码附录 字符串中插入字符问题 在字符数组中插入一个字符 以前都是照猫画虎,一直都没有自己亲自动手尝试过.这次亲自上阵,把自己的思路尽量理清并完成. 设计思路 定义一个字符数组a和标记插入位置的int型变量pos以及插入字符value. 再定义一个数组b,大小应该比a大1(更大当然更好),用于pos位后的元素的赋值. 赋值,将a中所有元素copy到b. 在pos位置前的元素不改动,pos位置的元素改为value.b[pos]=value; 对于

随机推荐