C++系统学习之二:字符串
上一篇文章主要学习的是C++的基本类型,它们是C++语言直接定义的,它们体现了计算机硬件本身具备的能力。而本篇文章将主要学习内置类型之外的标准库所定义的类型,分别是string和vector,此外还将学习用来和string与vector配套使用的类型——迭代器,其中string是可变长度的字符序列,而vector则是可变长的给定类型的序列,除此之外还将学习与上述类似的一种内置类型——数组,其也与硬件密切相关。
1. 命名空间的using声明
注意事项:
- 头文件中的代码一般来说不应该使用using声明
2. 标准库类型string
所在头文件:string
2.1 定义和初始化string对象
初始化string对象的几种方式
string s1; 默认初始化,s1是一个空串
string s2(s1); s2是s1的副本
string s2=s1; 等价于s2(s1),s2是s1的副本
string s3("value"); s3是“value”的副本,除了后面的空字符
string s3="value"; 等价于s3("value"),s3是“value”的副本
string s4(n,'c'); 把s4初始化为连续的n个字符c
直接初始化和拷贝初始化
如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化。
string s5="hiya"; 拷贝初始化
string s6("hiya"); 直接初始化
2.2 string对象上的操作
注意事项:
- 执行读取操作时,string对象会自动忽略开头的空白,并从第一个真正的字符开始读起,直到下一个空白处
- getline()读取整行会保留一行中的空白符,直到碰到换行符,但最终读到的数据不保留换行符号
- size()函数不要和int型的数据一起在表达式中使用,因为size()的返回类型是unsigned类型
- string的比较操作对大小写敏感,比较的时候,如果字符都相同则比较长短,否则比较第一个不相同的字符的字典顺序
- string和字面值的相加时要注意,加号两边必须要有一个string对象,不能全是字面值
2.3 处理string对象中的字符
在头文件cctype中定义了一组函数
使用基于范围的for循环遍历字符串的每个字符
string s = "hello world!";
for (auto c : s)
{
cout << c << endl;
}
如果需要修改字符串中的字符,则需要将循环控制变量定义为引用
string s = "hello world!";
for (auto &c : s)
{
c = toupper(c);
}
cout << s << endl;
NOTE:使用下标(索引)来访问字符串的某个字符时,一定要注意下标不能超出范围,这个时候我们一般使用decltype(s.size())来定义下标变量,这样就不会出现小于0的情况,只要控制小于size()即可。
for(decltype(s.size()) index=; index!=s.size() && !isspace(s[index]); ++index)
{
s[index] = toupper(s[index]);
}
C++系统学习之二:字符串的更多相关文章
- Java I/O系统学习系列二:输入和输出
编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<< ...
- ES6学习笔记(二)——字符串扩展
相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...
- Linux系统学习之 二:新手必须掌握的Linux命令2
2018-10-03 22:20:48 一.文件目录管理命令 1.touch 命令 用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”. 参数: -a :仅修改“读取时间(at ...
- 【SQL Server】系统学习之二:索引优化
页大小8192个字节,行限制为8060字节(大型对象除外). 包含varchar nvarchar varbinary sql_variant(8012,object类型) clr 的行,如果行大小超 ...
- 【mongodb系统学习之二】mongodb的启动
二.mongodb的启动: 1.在mongodb2.6.9的文件夹中建立data目录.logs目录以及 logs目录下的mongodb.log文件,如图: 2.进入到mongodb的bin目录中执 ...
- python学习笔记(二)-字符串方法
python的字符串内建函数: #====================常用方法=============================name = 'besttest' new_name = n ...
- rabbitmq系统学习(二)
Rabbitmq高级整合应用 RabbitMq整合Spring AMQP实战 RabbitAdmin 使用RabbitTemplate的execute方法执行对应操作 rabbitAdmin.decl ...
- linux系统学习(二)
文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...
- Linux系统学习 十二、VSFTP服务—简介与原理
1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...
随机推荐
- 【Aizu - ALDS1_7_A】Rooted Trees(树的表达)
Rooted Trees Descriptions: A graph G = (V, E) is a data structure where V is a finite set of vertice ...
- 码云最火爆开源项目 TOP 50,你都用过哪些?
前 20 名预览 排名软件排名软件 1zheng11AOSuite 2JFinal12Spiderman 3t-io13AG-Admin 4guns14renren-security 5hutool1 ...
- 51Nod 1097 拼成最小的数(字符串的排序)
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> ...
- [CF1111D] Destory the Colony
Portal 大致题意: 给定一个偶数长度(\(n \leq 10 ^ 5\))的字符串, 只包含大小写字母. 有q(\(q \leq 10 ^ 5\))次询问, 每次指定两个位置, 要求通过交换字符 ...
- 103 Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行).例如:给定二叉树 [3,9,20,null,null,15,7], 3 ...
- MODBUS移植的参考文章
https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 http://www.360doc.com/content/14/0906/09 ...
- HashMap源码及原理
HashMap 简介 底层数据结构分析 JDK1.8之前 JDK1.8之后 HashMap源码分析 构造方法 put方法 get方法 resize方法 HashMap常用方法测试 感谢 changfu ...
- 我喜欢的两个js类实现方式 现在再加上一个 极简主义法
闭包实现 变量是不会变的:) var myApplication = function(){ var name = 'Yuri'; var age = '34'; var status = 'sing ...
- 基于Java实现的插入排序算法
简述 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常 ...
- 1102 采药 2005年NOIP全国联赛普及组
1102 采药 2005年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 辰辰是个天资聪颖的孩子 ...