本文转自:http://www.jb51.net/article/37410.htm

一、char_traits 字符特征类 
1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特定行为 
2)定义了通用类型名

typedef _Elem char_type; 
typedef int int_type; 
typedef streampos pos_type; 
typedef streamoff off_type; 
typedef mbstate_t state_type;

其中 int_type 表示字符元素转换到特定编码时的整型表示,pos_type, off_type 分别作为字符串索引和字符串元素偏移的类型,类似容器迭中的指针,迭代类型和指针,迭代器的偏移类型。最后的 state_type 用于存储流状态,如出错,格式控制等等。

3)定义了字符 / 字符串操作的包装界面,以便通用算法的调用

assign(a, b) 定义将 b 字符赋值给 a 字符的过程,实现 a.operator = 的行为 
eq(a, b) 定义 a 字符和 b 字符的相等关系,实现 a.operator == 的行为 
lt(a, b) 定义 a 小于 b 的关系,实现 a.operator < 的行为 
compare(a_ptr, b_ptr, cnt) 定义两组字符串的比较,返回 int 类型,实现类似 memcmp 的行为 
length(ptr) 定义取字符串长度,实现类似 strlen 的行为 
copy(a_ptr, b_ptr, cnt) 定义两组字符串的复制,实现类似 memcpy 的行为 
move(a_ptr, b_ptr, cnt) 定义两组字符串的不重叠复制,实现类似 memmove 的行为 
assign(ptr, cnt, ch) 定义了填充字符串的过程,实现类似 memset 的行为 
to_int_type(ch) 定义了 char_type 到 int_type 整型的转换过程 
to_char_type(n) 定义了 int_type 到 char_type 字符型的转换过程 
eq_int_type(a, b) 定义两个和当前 char_type 类型对应的 int_type 的相等关系 
eof() 定义字符串结尾符,使用整型表示 
not_eof(n) 定义非字符串结尾符,若输入结尾符,则返回 1,其他输入返回原值,即总是不返回 eof()

4)int_type 类型应是当前字符类型的整型编码

二、std::string 并不是序列容器,没有 front() 和 back() 界面用于取出前端和尾端的元素,使用 std::string::operator [] 并传递 streampos 类型取得特定元素,如 std::string::size() - 1 作为索引取得最后一个字符

三、basic_string 支持的初始化 
1)默认初始化 
2)分配器 
3)复制构造 
4)局部复制 [_Roff, _Roff + _Count) 
5)局部复制 + 分配器 
6)C 字符串 [_Ptr, <null>) 
7)C 字符串 + _Count [_Ptr, _Ptr + _Count) 
8)C 字符串 + 分配器 
9)C 字符串 + _Count + 分配器 [_Ptr, _Ptr + _Count)

10)_Count * _Ch 
11)_Count * _Ch + 分配器 
12)迭代器 [_ItF, _ItL) 
13)迭代器 + 分配器

字符到串不能初始化,但支持 operator = 赋值和 operator += 累加赋值运算。

四、字符串的区间有效性 
对串的索引访问在超过字符串的有效区间时,因为串的在实现上对内置的字符缓冲区执行下标访问,所以不会导致异常,但是将得到不可预知的结果,通常是不可用的。
将其他字符串作为右值输入时,对该串取出计数大于串大小时按串大小计算。 
std::basic_string::size_type 的实际类型为 size_t,在 Visual C++ 7.1 中实现为 unsigned,std::basic_string::npos 被静态设定为

(basic_string<_Elem, _Traits, _Alloc>::size_type)(-1);

在查找子字符串等操作时,函数返回 npos 的值表示非法索引。

五、比较字符串 
允许的比较对象 
1)compare(s2) 其他同类型字符串 
2)compare(p) C 风格字符串 
3)compare(off, cnt, s2) [off, off + cnt) 同 s2 执行比较 
4)compare(off, cnt, s2, off2, cnt2) [off, off + cnt) 同 s2 [off2, cnt2) 执行比较 
5)compare(off, cnt, p) [off, off + cnt) 同 [p , <null>) 执行比较 
6)compare(off, cnt, p, cnt2) [off, off + cnt) 同 [p, p + cnt2) 执行比较

返回 -1, 0, 1 作为小于、等于和大于的比较结果。

 

六、附加数据 
1)使用 operator += 接受其他字符串,C 风格字符串和字符 
2)使用 push_back() 在尾部附加字符,并使得通过字符串构造的 back_iterator 可以访问 
3)append() 附加 
        1、append(s) 追加字符串 
        2、append(s, off, cnt) 追加字符串 s [off, off + cnt) 
        3、append(p) 追加字符串 [p, <null>) 
        4、append(p, cnt) 追加字符串 [p, p + cnt) 
        5、append(n, c) 填充 n * c 
        6、append(InF, InL) 追加输入流 [InF, InL)

4)insert() 插入 
        1、insert(off, s2) 插入字符串 
        2、insert(off, s2, off2, cnt2) 插入字符串 s [off2, off2 + cnt2) 
        3、insert(off, p) 插入字符串 [p, <null>) 
        4、insert(off, p, cnt) 插入字符串 [p, p + cnt)

5、insert(off, n, c) 插入 n * c 
        6、insert(iter) 元素默认值填充 
        7、insert(iter, c) 插入特定元素 
        8、insert(iter, n, c) 插入 n*c 
        9、insert(iter, InF, InL) 插入 [InF, InL)

5)operator +(a, b) 
字符串关联运算符重载中支持 operator + 的形式 
        1、s + s 
        2、s + p 
        3、s + c 
        4、p + s 
        5、c + s

七、查找、替换和清除 
1)find() 查找 
        1、find(c, off) 在 s [off, npos) 中查找 c 
        2、find(p, off, n) 在 s [off, npos) 中查找 [p, p + n) 
        3、find(p, off) 在 s [off, npos) 中查找 [p, <null>) 
        4、find(s2, off) 在 s [off, npos) 中查找 s2

2)find() 的变种 
        1、rfind() 具有 find() 的输入形式,反序查找 
        2、find_first_of() 具有 find() 的输入形式,返回第一个匹配的索引 
        3、find_last_of() 具有 find() 的输入形式,返回倒数第一个匹配的索引 
        4、find_first_not_of() 具有 find() 的输入形式,返回第一个不匹配的索引 
        5、find_last_not_of() 具有 find() 的输入形式,返回倒数第一个不匹配的索引

3)replace() 替换 
        1、replace(off, cnt, s2) 将 s [off, off + cnt) 替换成 s2 
        2、replace(off, cnt, s2, off2, cnt2) 将 s [off, off + cnt) 替换成 s2 [off2, off2 + cnt2)
        3、replace(off, cnt, p) 将 s [off, off + cnt) 替换成 [p, <null>) 
        4、replace(off, cnt, p, cnt2) 将 s [off, off + cnt) 替换成 [p, p + cnt2)

5、replace(off, cnt, n, c) 将 s [off, off + cnt) 替换成 c * n

使用迭代器的情况: 
        6、replace(InF, InL, s2) 将 [InF, InL) 替换成 s2 
        7、replace(InF, InL, p) 将 [InF, InL) 替换成 [p, <null>) 
        8、replace(InF, InL, p, cnt) 将 [InF, InL) 替换成 [p, p + cnt) 
        9、replace(InF, InL, n, c) 将 [InF, InL) 替换成 n * c 
        10、replace(InF, InL, InF2, InL2) 将 [InF, InL) 替换成 [InF2, InL2)

4)erase() 删除 
        1、erase(off, cnt) 从字符串 s 中删除 s [off, off + cnt) 
        2、erase(iter) 从字符串 s 中删除 *iter 
        3、erase(ItF, ItL) 从字符串 s 中删除 [ItF, ItL)

八、取出字符串 
1)取得 C 风格字符串 
c_str() 返回常量类型的 C 风格字符串指针,copy(ptr, cnt, off = 0) 则将指定大小的字符串复制到特定指针。data() 在 Visual C++ 7.1 中仅仅调用了 c_str() 实现。 
2)取得子字符串 
substr(off, cnt) 取得 s [off, off + cnt) 的副本。  
3)复制子字符串 
copy(p, off, cnt) 将 s [off, off + cnt) 复制到 p。

九、字符串的缓冲区管理 
字符串具有类似 std::vector 的缓冲区管理界面。  
size() 取得有效元素长度 
max_size() 取得当前内存分配器能分配的有效空间 
reserve() 为缓冲区预留空间 
capacity() 取得缓冲区的容量 
resize() 重设串的长度,可以为其指定初始化值

  十、定义输入迭代器的尾端 
向 istream_iterator 传递输入流对象以创建输入迭代器,输入迭代器持有输入流对象的指针,默认创建和读取流失败的情况下该指针被设置为 0。并且在实现输入迭代器间的 operator == 相等运算时,进行持有的流对象指针的相等比较,这样,默认创建的输入迭代器将被用于匹配输入流的结束。

* 当输入流读取失败,用户执行 if, while 条件判断时,实际上先将判断值转换成 void* 类型,或者根据 operator ! 运算符的返回结果,对输入流重载 operator void* 和 operator ! 运算符,可以定义输入流在布尔表达式中的行为,使得当流读取失败的情况下,输入迭代器可以通过布尔表达式来确认,而不是显式访问 fail() 成员函数.

c++概念字符串操作 (转)的更多相关文章

  1. C语言字符串操作总结大全

    1)字符串操作 strcpy(p, p1)  复制字符串  函数原型strncpy(p, p1, n)   复制指定长度字符串  函数原型strcat(p, p1)   附加字符串  函数原型strn ...

  2. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  3. c语言的字符串操作(比较详细)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  4. C语言字符串操作函数集

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  5. C语言字符串操作详细总结

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  6. 面试之C语言字符串操作总结大全(转载)

    趁着十一就好好补补数据结构吧,通信这个不软不硬的专业,现在还是得好好学学补习补习,,你这个非211的本科生!虽然拿到了一个offer,但是觉得时间还有,得继续拼一拼,希望不辜负! 1)字符串操作 st ...

  7. C语言学习笔记 (008) - C语言字符串操作总结大全(超详细)(转)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  8. C语言字符串操作总结大全(超具体)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  9. C语言字符串操作

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

随机推荐

  1. JVM插码之三:javaagent介绍及javassist介绍

    本文介绍一下,当下比较基础但是使用场景却很多的一种技术,稍微偏底层点,就是字节码插庄技术了...,如果之前大家熟悉了asm,cglib以及javassit等技术,那么下面说的就很简单了...,因为下面 ...

  2. JVM体系结构之一:总体介绍

    一.Java的内存区域划分 Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. Java的内存区域主要分为五部分: 程序计数器(PC) ...

  3. DCloud-MUI:文档 UI组件

    ylbtech-DCloud-MUI:文档 UI组件 1.返回顶部 1.accordion(折叠面板) 折叠面板从二级列表中演化而来,dom结构和二级列表类似,如下: <ul class=&qu ...

  4. Java中使用同步关键字synchronized需要注意的问题

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...

  5. JavaScript接口

    JavaScript中实现接口的方法有三种: 第一种,使用注释的方法实现接口 特点:(1)最简单,但是功能最弱(2)利用 interface和 implement"文字"(3)把他 ...

  6. SharePoint Project Server List 列表CURD操作使用rest api接口

    //#region 界面交互代码 var issuesUtils = issuesUtils || {}; (function () { /** * 点击问题提处理方案按钮事件 */ issuesUt ...

  7. python中报中文编码异常,Non-ASCII ,but no encoding declared

    异常信息: SyntaxError: Non-ASCII character '\xe5' in file a.py on line 9, but no encoding declared; see ...

  8. console (控制台)

    console 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台. 该模块导出了两个特定的组件: 一个 Console 类,包含 console.log()  ...

  9. VCF文件处理工具PyVCF

    vcf格式示例 ##fileformat=VCFv4.1 ##FILTER=<ID=LowQual,Description=”Low quality”> ##FORMAT=<ID=A ...

  10. Git删除master branch中最近一次的提交

    在做一个项目的过程中,需要删除master brach中最近一次的提交,需要在Git repository中删除 采用步骤如下: 1. 在Visual Studio中打开项目,进入到master br ...