本文转自: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. 【转】 Pro Android学习笔记(五四):调试和分析(2):View层次结构

    目录(?)[-] 帮助性能分析 帮助精简UI设计 对于模拟器上的应用(非真实设备),可以查看Hierarchy View,如下图: 帮助性能分析 当我们选择某个view时,我们可以看到measurin ...

  2. VBS调用并监控记事本进程

    Dim flag flag=true Set WshShell = CreateObject("WScript.Shell") '创建WScript.Shell对象     Set ...

  3. numpy.ones(shape, dtype=None, order='C')

    Return a new array of given shape and type, filled with ones. Parameters: shape : int or sequence of ...

  4. javascript如何判断手机是什么系统

    做H5页面的时候,经常会用到判断手机是什么系统,根据系统的型号,实现不同的效果,那么如何判断显示页面的手机型号呢? (function(){ var isMobile={ Android:functi ...

  5. (Python编程)Pickle对象

    Programming Python, 3rd Edition 翻译 最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD 19.4. Pickled Obje ...

  6. PullToRefresh------ListView的使用

    第一步 :写出布局文件的设置 <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pu ...

  7. service使用handler与Activity沟通的两种方法

    通过之前的学习,我们知道了在主线程中声明一个handler实例并实现了消息的处理方法之后,我可以在子线程中用此实例向主线程发消息,在处理方法中获取消息并更新UI. 那么,如果我们想用handler在s ...

  8. android activity生命周期的一张经典图片

    图片来自http://blog.csdn.net/android_tutor/article/details/5772285 onpause只有弹出的窗体是Activity的时候才会触发,并非是通过焦 ...

  9. Installshield build all installer in development computer

    Step: Copy all "SetupPrerequisites" from build server. please make sure below items: Insta ...

  10. Flask17 Flask_Script插件的使用

    1 什么是Flask_Script 可以对flask应用做一些统一的操作 flask_script官网:点击前往 2 安装flask_script pip install -i https://pyp ...