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. ]; , , }; //数组长度固 ...
随机推荐
- MySQL主从问题
Mysql数据库主从心得整理 管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验 ...
- 面试题:获取大量数据中某一条的index
提问: 群里分享了一个面试题:页面里有很多条数据,怎么知道这条数据的index,并且不使用循环? 分析: 如果在数组里,直接用indexOf,但对于对象会比较麻烦. 在页面上,不使用循环的话,可以用定 ...
- 读取Excel文件内容在Web上显示
点击事件代码.cs protected void Button1_Click(object sender, EventArgs e) { string strPath = "d:/test. ...
- ExtJS4.2.1
ExtJS4.2.1 1. 介绍 1.1 说明 ExtJS是一个用javascript.CSS和HTML等技术实现的主要用于创建RIA即富客户端,且与后台技术无关的前端Ajax框架. 常用于企业内部管 ...
- F#(1)
如果你也会C#,那不妨了解下F#(1):F# 数据类型 简单介绍 F#(与C#一样,念作“F Sharp”)是一种基于.Net框架的强类型.静态类型的函数式编程语言.可以说C#是一门包含函数式编程 ...
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案
刚到一家公司,做原始的工作---接口,程序就我一人,没环境,没架构,更没旧项目可以利用,一切从0开始,经理以为我是老鸟,来就布置任务,要一周拿出结果.其实有现成架构的话写个接口还不是分分钟钟的事,关键 ...
- flex
http://www.w3.org/html/ig/zh/wiki/Css3-flexbox https://developer.mozilla.org/zh-CN/docs/CSS/CSS_Refe ...
- 如何看懂XDEBUG+WEBGRIND?(转)
看到一个很有用的东东,收藏.. http://blog.csdn.net/yukon12345/article/details/11408617 ~~~~~~~~~~ 使用: ...
- vim 中Ctags的安装和使用
Ctags是一个用来为源文件中的标识符(如变量.函数.类成员.宏定义等)创建索引文件的程序.这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名 ...
- debuggap,移动端调试新方式
最近发现了一个移动端调试的新技能,这里简单描述一下基本情况. 移动端调试常遇到的问题 手机访问只能看到页面的展现,除此之外看不到任何其他信息 无法像调试PC页面那么方便的查看js.dom.networ ...