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 ...
随机推荐
- 笔记-JavaWeb学习之旅5
CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...
- 【源码系列】Eureka源码分析
对于服务注册中心.服务提供者.服务消费者这个三个主要元素来说,服务提供者和服务消费者(即Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者(服务注册.续约.下线等),而注册中心主要是处理 ...
- JDBC连接池一 自定义连接池
package com.mozq.jdbc; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...
- swift SqliteDB使用
操作步骤: 1,在 Build Phases -> Link Binary With Libraries 中点击加号,添加 libsqlite3.0.tbd 到项目中来 2,创建连接头文件B ...
- Tinghua Data Mining 8
聚类 Clustering 根据评论信息做一些聚类,挖掘关系. bug 期望最大法 peek高峰的个数与高斯函数的个数不一定相同 Z隐含参数 不需要求 每个点属于哪个簇 类似于辅助线 跳板 借力 模型 ...
- JQuery基础知识梳理篇
这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...
- python之错题巩固
.#把班级学⽣数学考试成绩录⼊到⼀个列表中: 并求平均值. 要求: 录⼊的时候 # 要带着⼈名录⼊, 例如: 张三_44 li = [] : str_input = input('请输入你的姓名和分数 ...
- 解决 mac zsh 所有命令失效
上面的没啥用, 直接看分割线吧, 上面的是第一次遇到这个问题, 没有解决.. zsh: command not found: 参考: https://www.jiloc.com/43492.html ...
- 如何使用fastJson来解析JSON格式数据和生成JSON格式数据
由于项目用到了JSON格式的数据,在网上搜索到了阿里的fastjson比较好用,特此记录fastjson用法,以备以后查询之用. decode: 首先创建一个JSON解析类: public class ...
- 我的NopCommerce之旅(4): 定时任务之邮件
一.功能简介 用户购买物品生成订单后,系统将发送邮件提醒给用户 二.操作步骤 后台配置一个系统的默认发送邮箱 启动定时任务,这里包括多个任务,只需要启动邮件任务 查看邮件发送情况 三.数据库分析 [d ...