动机

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. windows技术

    鼠标右键菜单中没有新建文本文件怎么办? http://jingyan.baidu.com/article/046a7b3e1d737bf9c27fa9f7.html

  2. 动态加载.so文件并执行类函数

    背景:不同产品组将其功能编译为.so,这些.so 可以加载到统一的基础平台上运行,如果产品组代码有改动,只需要更新对应的.so 问题:如何动态加载.so文件,并使用里边的函数/类 ? 解决方法1: 使 ...

  3. javascript与mongodb的日期时区问题

    默认情况下,js的日期生成是当地时区,但默认显示是按照GMT显示的: > var c = new Date('2017-10-31 06:00:00'); > c 2017-10-30T2 ...

  4. 使用Vagrant打造Linux开发环境

    1.安装Oracle VM VirtualBox.vagrant,安装完成需重启电脑 Oracle VM VirtualBox安装包下载:https://www.virtualbox.org/wiki ...

  5. POJ 2923 【01背包+状态压缩/状压DP】

    题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...

  6. 在apache2.4.6中配置虚拟主机支持web.py

    web.py 是一个简单好用的python web框架. (http://webpy.org/) apache httpd是一款开源配置简单的web容器. (http://apache.org/) 假 ...

  7. java有自动垃圾回收机制

    当垃圾收集器判断已经没有任何引用指向对象的时候,会调用对象的finalize方法来释放对象占据的内存空间~ java中垃圾回收以前听老师讲好像是内存满了他才去做一次整体垃圾回收,在回收垃圾的同时会调用 ...

  8. Strobogrammatic Number II -- LeetCode

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  9. steelray project viewer

    steelray project viewer是一款英文语言软件,透过Steelray Project Viewer,可以打开.导航.浏览.打印Microsoft Project的.mpp文件.

  10. 如何隐藏 video 元素的下载按钮

    1. 使用 video 元素的 ControlList API <video controls controlsList="nodownload"></video ...