动机

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. MFC中GetParent()的作用(转)

    原文转自 https://bbs.csdn.net/topics/390540690 1.假如创建一个非模态的窗口,在如下两种做法里任选一种.(1) chatting.m_lpDlg = new CC ...

  2. XAudio2播放PCM

    XAudio2 是一个跨平台的API,在Xbox 360及Windows中得到支持.在Xbox 360上, XAudio2作为一个静态库编译到游戏可执行文件中.在Windows上,XAudio2提供一 ...

  3. 我们为什么需要 lock 文件

    前言 从 Yarn 横空出世推出 lock 文件以来,已经两年多时间了,npm 也在 5.0 版本加入了类似的功能,lock 文件越来越被开发者们接收和认可.本篇文章想从前端视角探讨一下我们为什么需要 ...

  4. pymongo: MongoClient opened before fork错误排解

    使用pymongo配合flask和gunicorn使用的时候触发以下错误信息: [2017-09-19 15:20: ] [25780] [CRITICAL] WORKER TIMEOUT (pid: ...

  5. 优化html中mp4视频加载速度

    如果使用参数faststart就会在生成完上边结构之后将moov移动到mdat前面:ffmpeg –i input.flv –c copy –f mp4 –movflags faststart out ...

  6. 使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体

    使用 DataGridView 控件的一种最常见方案是“主/详细信息”窗体,这样的窗体可显示两个数据库表之间的父/子关系.如果选择主表中的行,将导致以相应的子数据来更新详细信息表. 主/详细信息窗体很 ...

  7. DOS版PE工具制作

    // PE.cpp : 定义控制台应用程序的入口点. //DOS版PE工具制作 #include "stdafx.h" #include <windows.h> #in ...

  8. hdu 5720(贪心+区间合并)

    Wool Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  9. hdu 5125(LIS变形)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5125 题解: 这个题dp[i][0],dp[i][1]数组分别记录在第i个位置取a[i]和b[i]时 ...

  10. ASPOSE.WORD 另存为HTML

    var fi = new FileInfo(Environment.CurrentDirectory + "\\AE9302C0-AE48-4F4B-8489-6A428D9163C9_AL ...