【C++】string 类 ( 上)

标准库中的string类

注意:

1. string是表示字符串的字符串类

2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课

3. string在底层实际是:basic_string模板类的别名,typedef basic_string string;

4. 不能操作多字节或者变长字符的序列。 在使用string类时,必须包含#include头文件(#include<string>)以及using namespace std;

a. string类对象的常见构造

代码举例1

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1; // 相当于类对象的实例化
}

代码举例2

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1("hello world"); // 调用构造函数cout << t1 << endl;string t2 = "hello world"; //隐式类型转换(构造函数 + 拷贝构造 + 优化 -> 构造函数)cout << t2 << endl;
}

代码举例3

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1(10, 'a');  // 拷贝 10 个 acout <<  t1 << endl;
}

运行结果:

代码举例4

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1("hello");string t2(t1); // 拷贝构造cout << t2 << endl;
}

b. string类对象的容量操作

  • size (返回字符串有效字符长度,没有 '\0 ')

代码举例1

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1 = "hello";cout << t1.size() << endl;
}

运行结果:

  • capacity (返回字符串的总空间大小)

代码举例2

#include <iostream>
#include<string>
using namespace std;
int main()
{string t1 = "hello";cout << t1.capacity() << endl;
}

运行结果:

分析:

string 类里面的成员变量有两个可以存储空间,一个是数组,另一个是动态开辟的空间,当数组空间不足时,才会用动态开辟

  • reserve(扩大字符串容量,字符有效长度不变:即 size 不变)

代码举例3

#include <iostream>
using namespace std;
int main()
{string t1 = "hello";cout << "有效长度:" << t1.size() << " 总容量:" << t1.capacity() << endl;t1.reserve(100);cout << "有效长度:" << t1.size() << " 总容量:" << t1.capacity() << endl;
}

运行结果:

分析:

有些编译器在分配空间的时候,可能会对于开辟所需的空间再给大一点

  • resize (将有效字符的个数该成n个,多出的空间用字符c填充)

代码举例4

#include <iostream>
using namespace std;
int main()
{string t1 = "hello";cout << "有效长度:" << t1.size() << " 总容量:" << t1.capacity() << endl;t1.resize(100);cout << "有效长度:" << t1.size() << " 总容量:" << t1.capacity() << endl;t1.resize(10); //可以缩小有效长度,但总容量不会随意变动cout << "有效长度:" << t1.size() << " 总容量:" << t1.capacity() << endl;t1.resize(20, '*'); //对于的空间可以初始化任意字符cout << t1 << endl;
}

运行结果:

c. string类对象的访问及遍历操作

  • operator[] (返回pos位置的字符,和 C 语言的用法一样,const string类对象调用)
  • begin + end (begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器)

代码举例1

#include <iostream>
using namespace std;
int main()
{string t1 = "hello bit";string::iterator it = t1.begin();// it 相当于拿到 首元素的地址了while (it != t1.end()){cout << *it << endl;it++;}
}

运行结果:

分析:

  • rbegin + rend (rbegin获取最后一个字符的迭代器 + rend获取第一个字符前一个位置的迭代器)

代码举例2

#include <iostream>
using namespace std;
int main()
{string t1 = "hello bit";string::reverse_iterator rit = t1.rbegin();// it 相当于拿到 首元素的地址了while (rit != t1.rend()){cout << *rit << endl;rit++;}
}

运行结果:

分析:

  • 范围for

代码举例3

#include <iostream>
using namespace std;
int main()
{string t1 = "hello bit";for (auto i : t1){cout << i;}cout << endl;for (int i = 0; i < t1.size(); i++){cout << t1[i];}
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/506376.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合-Map接口

在Java中&#xff0c;Map接口表示键值对的集合&#xff0c;其中每个键都是唯一的&#xff0c;并且每个键映射到一个值。Map接口是集合框架中的一部分&#xff0c;位于java.util包中。它定义了一系列操作来管理键值对&#xff0c;例如添加键值对、删除键值对、获取键对应的值等。…

leetcode 热题 100_盛最多水的容器

题解一&#xff1a; 双指针遍历&#xff1a;容量计算公式为min(左高度&#xff0c;右高度)*底部距离&#xff0c;我们可以令底部距离逐步递减&#xff08;左右两边的指针向中部移动&#xff09;。此时对于min(左高度&#xff0c;右高度)&#xff0c;假设较高的线向中部移动&…

SpringBoot+Redis 解决海量重复提交问题,yyds!

在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求&#xff0c;我们来解释一下幂等的概念&#xff1a;任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义&#xff0c;最终的含义就是 对数据库的影响只能是一次性的&#xff0c;不能重复处理。如何保证其…

中国电子学会2019年12月份青少年软件编程Scratch图形化等级考试试卷四级真题。

第 1 题 【 单选题 】 1.以下模块&#xff0c;可以“说”出“我喜欢Apple”的是&#xff1f; A&#xff1a; B&#xff1a; C&#xff1a; D&#xff1a; 2.某学校为教师外出提供车辆服务&#xff0c;当外出人数小于5人时&#xff0c;派轿车&#xff1b;当外出人数为5至7人的话…

C++ 前缀和

目录 例1 例2 例3 例4 例5 例6 例7 例8 例1 DP34 【模板】前缀和 分析&#xff1a;dp和arr的大小并不是固定的&#xff0c;就是有没有偏移量&#xff0c;这里的n是从1开始&#xff0c;不如直接放到下标1处&#xff0c;在最后的减法时&#xff0c;如果用第一个参考代码会…

C语言中的字符魔法:大小写转换的艺术

引言 在C语言的世界里&#xff0c;字符处理是一项基础且重要的任务。字符作为编程中最基本的元素之一&#xff0c;承担着信息展示、数据交互等多重角色。特别是在处理文本信息时&#xff0c;字符的转换和识别显得尤为重要。大小写字母的转换就是其中一个常见的需求&#xff0c…

P4913 【深基16.例3】二叉树深度题解

题目 有一个n(n≤) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过n&#xff09;&#xff0c;建立一棵二叉树&#xff08;根节点的编号为1&#xff09;&#xff0c;如果是叶子结点&#xff0c;则输入0 0。 建好这棵二叉树之后&#xff0c;请求出它的深度…

【解决】虚幻导入FBX模型不是一个整体

问题&#xff1a; 现在有一个汽车的fbx模型&#xff0c;导入虚幻引擎&#xff0c;导入后变成了很多汽车零件模型。 解决&#xff1a; 把“合并网格体”勾选上&#xff0c;解决问题。

三层靶机靶场之环境搭建

下载&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;f4as 简介 2019某CTF线下赛真题内网结合WEB攻防题库&#xff0c;涉 及WEB攻击&#xff0c;内网代理路由等技术&#xff0c;每台服务器存在一个 Flag&#xff0c;获取每一 个Flag对应一个积分&…

PDF 解析问题调研

说点真实的感受 &#xff1a;网上看啥组件都好&#xff0c;实际测&#xff0c;啥组件都不行。效果好的不开源收费&#xff0c;开源的效果不好。测试下来&#xff0c;发现把组件融合起来&#xff0c;还是能不花钱解决问题的&#xff0c;都是麻烦折腾一些。 这里分享了目前网上能…

LeetCode 刷题 [C++] 第55题.跳跃游戏

题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 题目分析 题目中…

【IDEA+通义灵码插件】实现属于你的大模型编程助手

目录 1.前言 2.下载安装 3.解释代码 4.生成单元测试 5.生成注释 6.智能补全 1.前言 大模型到底该以一种什么方式落地&#xff0c;从而嵌入我们的工作当中&#xff0c;助力我们工作效率的提升&#xff0c;其实最好的方式也许就是虚拟助手的方式&#xff0c;就像钢铁侠的&…