C++字符串类型基本概念概述

开发 后端
C++字符串类型包含种类繁多,要想全部掌握这些知识并不是很容易。我们在这将会全方位为大家介绍这方面的知识,以方便大家理解。

C++编程语言中的字符操作时一个比较基础而且重要的应用技术。我们在这篇文章中将会为大家详细讲解一下有关C++字符串类型的基本概念,相信通过本文的解读,大家应该可以充分掌握这方面的知识。

要使用C++字符串类型中的string 类型必须先包含相关的头文件

  1. #include <string> 

例如下面是上一小节定义的字符数组

  1. #include <string> 
  2. string st( "The expense of spirit\n" ); 

st 的长度由size()操作返回不包含终止空字符

  1. cout << "The size of "<< st<< " is " << st.size()<< 
    " characters, including the newline\n"; 

string 构造函数的第二种形式定义了一个空字符串,例如

  1. string st2; // 空字符串 

我们怎样能保证它是空的当然一种办法是测试size()是否为0

  1. if ( ! st.size() )  
  2. // ok: 空 

更直接的办法是使用empty()操作

  1. if ( st.empty() )  
  2. // ok: 空 

如果C++字符串类型中不含有字符则empty()返回布尔常量true ,否则返回false。第三种形式的构造函数用一个string 对象来初始化另一个string 对象,例如

  1. string st3( st ); 

将st3 初始化成st 的一个拷贝,怎样验证呢?等于操作符比较两个string 对象,如果相等则返回true

  1. if ( st == st3 )  
  2. // 初始化成功 

怎样拷贝一个字符串呢?最简单的办法是使用赋值操作符,例如

  1. st2 = st3; // 把st3 拷贝到st2 中 

首先将与st2 相关联的字符存储区释放掉,然后再分配足够存储与st3 相关联的字符的存储区。***将与st3 相关联的字符拷贝到该存储区中。我们可以使用加操作符+ 或看起来有点怪异的复合赋值操作符+= 。将两个或多个字符串连接起来。例如:给出两个字符串

  1. string s1( "hello, " );  
  2. string s2( "world\n" ); 

我们可以按如下方式将两个字符串连接起来,形成第三个字符串

  1. string s3 = s1 + s2; 

如果希望直接将s2 附加在s1 后面那么可使用+= 操作符

  1. s1 += s2; 

s1 和s2 的初始化包含了一个空格一个逗号以及一个换行,这多少有些不方便,它们的存在限制了对这些string 对象的重用,尽管它满足了眼前的需要。一种替代做法就是混合
使用C 风格的字符串与string 对象。如下所示:

  1. const char *pc = ", ";  
  2. string s1( "hello" );  
  3. string s2( "world" );  
  4. string s3 = s1 + pc + s2 + "\n"; 

这种连接策略比较受欢迎,因为它使s1 和s2 处于一种更容易被重用的形式。这种方法能够生效是由于string 类型能够自动将C 风格的字符串转换成string 对象。例如:这使我们
可以将一个C 风格的字符串赋给一个string 对象。

  1. string s1;  
  2. const char *pc = "a character array";  
  3. s1 = pc; // ok 

但是反向的转换不能自动执行,对隐式地将string 对象转换成C 风格的字符串。string类型没有提供支持,例如,

下面试图用s1 初始化str。 就会在编译时刻失败

  1. char *str = s1; // 编译时刻类型错误 

为实现这种转换必须显式地调用名为c_str()的操作

  1. char *str = s1.c_str(); // 几乎是正确的但是还差一点 

名字c_str()代表了C++字符串类型中的string 类型与C 风格字符串两种表示法之间的关系。字面意思是给我一个C 风格的字符串,表示——即指向字符数组起始处的字符指针。但是这个初始化还是失败了,这次是由于另外一个不同的原因,为了防止字符数组被程序直接处理,c_str()返回了一个指向常量数组的指针(下一节将解释常量修饰符const)

const char*

str 被定义为非常量指针所以这个赋值被标记为类型违例,正确的初始化如下

  1. const char *str = s1.c_str(); // ok 

string 类型支持通过下标操作符访问单个字符,例如在下面的代码段中,字符串中的所有句号被下划线代替

  1. string str( "fa.disney.com" );  
  2. int size = str.size();  
  3. for ( int ix = 0; ix < size; ++ix )  
  4. if ( str[ ix ] == '.' )  
  5. str[ ix ] = '_'; 

以上就是对C++字符串类型的相关介绍。

【编辑推荐】

  1. C++中C风格字符串基本概念介绍
  2. C++调用python脚本函数基本应用指南
  3. C++动态创建对象应用技术讲解
  4. 各种常用C++类库概览
  5. C++显式转换中几种不同的转换方式
责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-04 17:32:43

C++中C风格字符串

2010-02-04 13:56:24

C++类模板特化

2010-02-05 09:57:25

C++中英文字符串

2010-02-03 11:11:18

C++类型转换

2010-02-06 15:58:10

C++集合初始化

2010-02-02 10:33:22

C++引用

2010-02-03 13:22:07

C++时间

2010-02-05 12:57:20

C++ kdevelo

2010-02-03 14:36:47

C++仿函数

2010-02-01 17:24:41

C++循环语句

2009-09-04 10:26:09

Java和C#字符串类

2010-02-02 15:30:05

C++ include

2010-02-02 13:41:01

C++类继承

2010-02-01 14:07:12

C++多态性

2010-02-04 14:01:43

C++非类型类模板参数

2010-02-04 10:08:00

C++静态成员函数

2010-02-05 17:34:37

C++函数模板

2010-02-06 14:04:58

C++内存使用机制

2009-08-07 14:22:56

C#字符串搜索

2010-03-01 14:50:30

WCF行为类型
点赞
收藏

51CTO技术栈公众号