上一篇文章主要学习的是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. Validation(1)

    站在巨人的肩膀上 Java Bean Validation 最佳实践 参数校验是我们程序开发中必不可少的过程.用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操 ...

  2. DBUtils C3P0 阿里巴巴德鲁伊连接池工具的下载

  3. C - How Many Tables

    #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> ...

  4. nginx之location、rewrite配置

    https://www.cnblogs.com/koal/p/6915106.html rewrite  地址重写 如上配置对于: /images/ttt/test.png 会重写到/mic?file ...

  5. 3.KPCR

    KPCR: CPU控制区(Processor Control Region) 当线程进入0环时, FS:[0]指向KPCR(3环时FS[0]-> TEB)每个CPU都有一个KPCR结构体(一个核 ...

  6. kojs select绑值(工作)

    <!DOCTYPE html>   <html> <head> <meta charset="utf-8" />   <tit ...

  7. [软件工程基础]2017.11.02 第六次 Scrum 会议

    具体事项 燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #10 搭建可用的开发测试环境:#9 阅读分析 PhyLab 后端代码与文档:#8 掌握 Laravel 框 ...

  8. 洛谷1072(gcd的运用)

    已知正整数a0,a1,b0,b1,设某未知正整数x满足: 1. x 和 a0 的最大公约数是 a1​: 2. x 和 b0​ 的最小公倍数是b1. Hankson 的“逆问题”就是求出满足条件的正整数 ...

  9. VMware的linux虚拟机实现和windows的文件共享

    使用的centos7和windows10,在虚拟机centos7中是root身份.由于是第一次用没有界面的linux,可谓是困难重重…… 一 打开VMware,然后选中你的虚拟机,我的是centos7 ...

  10. Unix高级编程之文件权限

    1.访问权限表 st_mode 意义 S_IRUSR 用户-读 S_IWUSR 用户-写 S_IXUSR 用户-执行 S_IRGRP 组-读 S_IWGRP 组-写 S_IXGRP 组-执行 S_IR ...