上一篇文章主要学习的是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++系统学习之二:字符串的更多相关文章

  1. Java I/O系统学习系列二:输入和输出

    编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<< ...

  2. ES6学习笔记(二)——字符串扩展

    相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...

  3. Linux系统学习之 二:新手必须掌握的Linux命令2

    2018-10-03 22:20:48 一.文件目录管理命令 1.touch 命令 用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”. 参数: -a :仅修改“读取时间(at ...

  4. 【SQL Server】系统学习之二:索引优化

    页大小8192个字节,行限制为8060字节(大型对象除外). 包含varchar nvarchar varbinary sql_variant(8012,object类型) clr 的行,如果行大小超 ...

  5. 【mongodb系统学习之二】mongodb的启动

    二.mongodb的启动: 1.在mongodb2.6.9的文件夹中建立data目录.logs目录以及   logs目录下的mongodb.log文件,如图: 2.进入到mongodb的bin目录中执 ...

  6. python学习笔记(二)-字符串方法

    python的字符串内建函数: #====================常用方法=============================name = 'besttest' new_name = n ...

  7. rabbitmq系统学习(二)

    Rabbitmq高级整合应用 RabbitMq整合Spring AMQP实战 RabbitAdmin 使用RabbitTemplate的execute方法执行对应操作 rabbitAdmin.decl ...

  8. linux系统学习(二)

    文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...

  9. Linux系统学习 十二、VSFTP服务—简介与原理

    1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...

随机推荐

  1. boot接入elasticsearch

    boot接入elasticsearch 参考博客:https://blog.csdn.net/li521wang/article/details/83792552 项目源码demo:https://g ...

  2. kafka剖析(转)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  3. linux常用命令(ubuntu)

    编辑: vi [path] vim [path] :q 退出 :wq 保存退出 查看进程 ps ps -aux | grep mem 查看全部含 “mem”的进程 ps –aux  查看全部 在系统启 ...

  4. Codeforces Round #547 (Div. 3) D. Colored Boots

    链接:https://codeforces.com/contest/1141/problem/D 题意: 给连个n长度的字符串. 求两个字符串相同字符对应位置的对数,并挨个打印. 字符:?可以代替任何 ...

  5. Codeforces Round #533(Div. 2) B.Zuhair and Strings

    链接:https://codeforces.com/contest/1105/problem/B 题意: 给一个字符串和k,连续k个相同的字符,可使等级x加1, 例:8 2 aaacaabb 则有aa ...

  6. getAnnotation为null的坑

    在写一个基于SpringAOP的权限控制的. 自己定义了一个注解,然后逻辑代码需要通过获取自定义注解的一个属性来进行权限控制. 下面简单上一下关键代码: 自定义注解: @Documented //有关 ...

  7. Sawgger框架

    简介详情:https://blog.csdn.net/sanyaoxu_2/article/details/80555328

  8. python学习之TCP/UDP

    TCP/UDP都是网络编程(socket)的两种基于C/S结构的程序. UDP的9999端口与TCP的9999端口可以各自绑定. UDP:非可靠连接速度快,服务器:创建socket 绑定ip和端口后直 ...

  9. RedHat Linux Shell常用命令(多数也适用于Unix和AIX)

    注:本文转载自疯狂的矩阵一文,http://www.cnblogs.com/520sojustdoit/p/4642568.html --------------------------------- ...

  10. Springboot2.X集成Quartz集群

    为什么要使用Quzrtz集群 在项目进行集群部署时,如果业务在执行中存在互斥关系,没有对定时任务进行统一管理,就会引起业务的多次执行,不能满足业务要求.这时就需要对任务进行管理,要保证一笔业务在所有的 ...