动机

C++标准程序库中的string class使我们可以将string当做一个一般型别。我们可以像对待基本型别那样地复制、赋值和比较string,

再也不必但系内存是否足够、占用的内存实际长度等问题。

操作函数

1.构造函数和析构函数

下表列出string的所有构造函数和析构函数

2.大小和容量

size()和length():返回string中现有的字符个数。

max_size():返回一个string最多能够包含的字符数,这个跟机器本身的限制有关系。

capacity():重新分配内存之前,string所能包含的最大字符数。

3.元素存取

string允许我们对齐所办函字符进行读写。有两种方法可以访问单一字符:

subscript(下标)操作符[]和成员函数at()。两者都返回某指定索引的对应位置上的字符。

4.比较

string支持常见的比较操作符,操作数可以是string或C-string:

5.更改内容

赋值:可以用operator=对字符串赋新值。新值可以是string、C-string或单一字符。

交换:string提供了一个特殊的swap()函数用来交换两字符串内容。

6.安插和移除字符

string提供许多成员函数用于安插、移除、替换、擦除字符。

我们可以使用operator+=、append()和push_back()添加字符。可以使用erase()函数来移除字符

7.字串和字符串接合

我们可以使用成员函数substr()从string身上提取出子字符串。例如:

std::string s("interchangeability");
s.substr() //return a copy of s
s.substr() //return string("ability")
s.substr(,) //returns string("change")
s.substr(s.find('c')) //returns string("changeability")

8.搜索和查找

下表列出string的搜寻函数

所有搜寻函数都返回符合搜寻条件之字符区间内的第一个字符的索引。如果搜寻不成狗,则返回npos。

这些搜寻函数都采用下面的参数方案:

第一参数总是被搜寻的对象;

第二参数(可有可无)指出string内的搜寻起点(索引)

第三参数(可有可无)指出搜寻的字符个数

String对迭代器的支持

string是字符的有序群集。所以C++标准程序库为string提供了相应接口,以便将字符串当做STL容器使用。

string迭代器是random access(随机存取)迭代器。所以任何STL算法都可与它搭配。

下表列出了string的迭代器操作函数

下面是string迭代器的运用实例

 #include <string>
#include <iostream>
#include <algorithm>
using namespace std; bool nocase_compare(char c1,char c2)
{
return toupper(c1)==toupper(c2);
} int main()
{
string s1("This is a string");
string s2("STRING");
if(s1.size()==s2.size()&&equal(s1.begin(),s1.end(),s2.begin(),nocase_compare))
cout<<"the strings are equal"<<endl;
else
cout<<"the strings are not equal"<<endl;
string::iterator pos;
pos=search(s1.begin(),s1.end(),s2.begin(),s2.end(),nocase_compare);
if(pos==s1.end())
cout<<"s2 is not a substring of s1"<<endl;
else
cout<<'"'<<s2<<"\" is a substring of \""
<<s1<<"\"(at index "<<pos-s1.begin()<<")"<<endl;
}

STL学习笔记(string)的更多相关文章

  1. Effective STL 学习笔记: 多用 vector & string

    Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...

  2. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  3. Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  6. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  7. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  8. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  9. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  10. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

随机推荐

  1. linux 内存查看方法:meminfo\maps\smaps\status 文件解析

    linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍 ...

  2. (八)ubuntu安装软件提示:Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

    question: ubuntu@ubuntu:/usr/src/Linux-headers-3.5.0-23-generic$ sudo apt-get install cheese [sudo] ...

  3. Centos 6.3Yum安装NodeJS

    1. 添加epel源: (1)查看机器位数 file /sbin/init 或者 file /bin/ls (2)X64: rpm -ivh http://download.fedoraproject ...

  4. Python_Tips[0] -> 关于 import

    关于 import 1 import import可用于导入一个Python的标准模块,包括.py文件或带有__init__.py的文件目录. 在Python中,import一个模块后,若再次impo ...

  5. JQuery里面的下啦菜单

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  6. 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)

    一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...

  7. NIO入门之BIO

    传统BIO编程 网络编程的基本模型是Client-Server模型,也就是两个进程之间相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的端口发起连接请求,通 ...

  8. 说一说ST表 讲一讲水题

    ST表 一.算法介绍 如何快速求解RMQ问题呢?暴力复杂度O(n),线段树复杂度O(n)~O(logn),要是数据规模达到10^7或者更高呢?我们需要一种可以做到O(1)查询的算法,这时就可以用到ST ...

  9. devexpress XtraReport报表 ---主从报表

    private void GetWqpWorkPrinter(List<ReelListMagt> list, string WorkDate, User user) { ReelList ...

  10. iOS 获取当前经纬度

    一般说来LBS功能一般分为两块:一块是地理定位,就是获取当前精度.纬度和地理位置的功能,这一部分功能主要用到CoreLocation.Frameworks.一部分就是显示地图信息.丰富地图内容等,这一 ...