C++Primer笔记(3)
标准库类型string表示可变长的字符序列,使用前先包含string头文件。(哈哈,终于可以扔掉C语言中的str函数)因为是标准库的一部分,所以string被定义在命名空间std中。所以你懂该怎么做(参见这儿)。
在stl_string_fwd.h中找到如下语句:
typedef basic_string<char> string;
basic_string是一个模板类,在string中有定义。可以看出string是对char类型的一个封装,未对其进行深挖,所以本次笔记只做为string操作手册使用。
初始化string对象的方式:
string s1; //默认初始化,s1为空串
string s2(s1); //s2是s1的副本
string s2 = s1; //等价于上一行
string s3("test"); //s3是字面值"test"的副本,除了最后的空字符外
string s3 = "test"; //等价于上一行
string s4(n, 'c'); //s4被初始化为n个'c'组成的字符串
string s5(cp, n); //s5是cp指向的字符串数组中前n个字符的拷贝。此数组至少应该包含n个字符
string s6(s5, n); //s6是s5从下标n开始的字符的拷贝。若s5.size()<n,则构造函数行为未定义
string s6(s5, n, m); //s6是s5从下标n开始m个字符的拷贝。若s5.size()<n,则构造函数行为未定义。不管m值是多少,构造函数至多拷贝s5.size() - n个字符
string对象上的操作:
os << s 将s写到输入流os当中,返回os
is >> s 从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is, s) 从is中读取一行赋给s,返回is
s.empty() 判断s是否为空,为空返回true,否则返回false
s.size() 返回s中字符的个数
s[n] 返回s中第n个字符的引用,位置n从0开始
s1 + s2 返回s1、s2拼接后的内容
s1 = s2 用s2的副本代替s1中内容
s1 == s2 判断s1、s2是否相等
s1 != s2 是否不相等
<,<=,>,>= 利用字符在字典中的顺序进行比较,从首个字符开始向后依次比较,一有结果立刻返回。
插入
s.insert(pos, args); //在pos之前插入args指定的字符。pos可以是一个下标或者迭代器。接受下标的版本返回一个指向s的引用,接受迭代器的版本返回指向第一个插入字符的迭代器。
删除
s.erase(pos, len); //删除从位置pos开始的len个字符。如果len被省略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用
替换
s.assign(args); //将s中的字符替换为args指定的字符。返回一个指向s的引用
s.replace(n, m, args); //删除从下标n开始m个字符或删除迭代器n和m表示的范围中的字符,替换为args指定的字符。
追加
s.append(args); //将args中的字符追加到s中,返回一个指向s的引用
子字符串操作
s.substr(pos, n); //返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值是0,n的默认值是s.size() - pos,即拷贝从pos开始的所有字符
搜索
s.find(args); //查找s中args第一次出现的位置
s.rfind(args); //查找s中args最后一次出现的位置
s.find_first_of(args); //在s中查找args中任何一个字符第一次出现的位置
s.find_last_of(args); //在s中查找args中任何一个字符最后一次出现的位置
s.find_first_not_of(args); //在s中查找第一个不在args中的字符
s.find_last_not_of(args); //在s中查找最后一个不在args中的字符
比较
s.compare(s1); //比较string s和s1
s1.compare(pos1, n1, s2); //将s1中从pos1开始的n1个字符与s2进行比较
s1.compare(pos1, n1, s2, pos2, n2); //将s中从pos1开始的n1个字符与s2中从pos2开始的n2个字符串进行比较
s.compare(cp); //比较s和cp指向的以空字符结尾的字符串数组
s1.compare(pos1, n1, cp); //将s1和从pos1开始的n1个字符与cp指向的以空字符结尾的字符串数组比较
s1.compare(pos1, n1, cp, n2); //将s1和从pos1开始的n1个字符与指针cp指向的地址开始的n2个字符进行比较
string和数值之间的转换
to_string(var); //返回数值val的string表示。val可以是任意算术类型 /*返回s的起始子串的数值*/
stoi(s, p, b); //返回int型
stol(s, p, b); //返回long型
stoul(s, p, b); //返回unsigned long型
stoll(s, p, b); //返回long long型
stoull(s, p, b); //返回unsigned long long型
stof(s, p, b); //返回float型
stod(s, p, b); //返回double型
stold(s, p, b); //返回long double型
/*其中p为size_t类型的指针,用来存放第一个非数值字符的下标,默认为0*/
/*b表示进制,默认为10*/
此处应注意在string转数值时,所提供的string中第一个非空白字符必须是数值中可能出现的字符!
C++Primer笔记(3)的更多相关文章
- C++ Primer笔记
C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...
- C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理
今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...
- C++ Primer 笔记 第一章
C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...
- C++primer笔记之顺序容器
最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ...
- c++ primer 笔记 (一)
昨天开始看的<C++ Primer>,确实不错.希望这周抓紧看完,每天做下笔记,以便以后复习. main函数返回一个值给操作系统 操作系统通过main函数返回的值来确定程序是否成功执行 ...
- C++ Primer笔记(1)——连续读取数据、类型对应的尺寸、类型转换、字符串分行写法
这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream ...
- C++ Primer 笔记 第三章
C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ...
- C++ Primer 笔记 第二章
C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...
- C++ Primer 笔记——数组
1.数组的大小是固定不变的,声明时必须指定大小(或者使用列表初始化),而且大小必须大于0,C++ Primer里面也建议,如果不确定元素的个数,请使用vector. ]; , , }; //数组长度固 ...
随机推荐
- Guava API学习之Multimap
相信大家对Java中的Map类及其之类有大致的了解,Map类是以键值对的形式来存储元素(Key->Value),但是熟悉Map的人都知 道,Map中存储的Key是唯一的.什么意思呢?就是假如我们 ...
- javascript事件详细说明
javascript事件列表解说javascript事件列表解说事件 浏览器支持 解说一般事件 onclick IE3.N2 鼠标点击时触发此事件ondblclick IE4.N4 鼠标双击时触发此事 ...
- 原生app,WEBAPP,混合app
什么叫做原生App? 原生App是专门针对某一类移动设备而生的,它们都是被直接安装到设备里,而用户一般也是通过网络商店或者卖场来获取例如 The App Store 与 Android Ap ...
- 关于vs2013error C4996: 'strcmpi': The POSIX name for this item is deprecated.的错误解决办法!
1.出现如下错误(如图1) 2.解决办法(如图2)在头文件处添加#pragma warning(disable: 4996)
- Selenium2Library+ride学习笔记
一.环境部署 1.安装python2.7编译环境.ride环境以及Selenium2Library环境,环境部署可参见前面几节. 2.启动RIDE编译环境,导入Selenium2Library库. ...
- 一个ajax的后台controller
@RequestMapping("/api/merBrand") @ResponseBody public ResultBrand merBrand(HttpServletRequ ...
- vga|9针串口|网口测试方法
VGA口的测试: 1.什么是VGA口,干什么用的??? 视频数据传输线,传输视频信号的 2.VGA口的接法?? 两变都为公头的接法:最笨的办法,脚对脚,15根线全连起来 3.VGA的内部接法?? 4. ...
- jquery 实现全选反选
jquery代码 $(function () { $('#inputCheck').click(function () { if ($(this).attr("checked")) ...
- hdu 4512 吉哥系列故事——完美队形I_LCIS
题目链接 题意: 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 求,则就是新 ...
- C语言中所有变量和常量所使用的内存总结
(1)相同点:三种获取内存的方法,都可以给程序提供可用内存,都可以用来定义变量给程序用.(2)不同点:栈内存对应C中的普通局部变量(别的变量还用不了栈,而且栈是自动的,由编译器和运行时环境共同来提供服 ...