c++---------------------------string

ops/2025/1/2 6:43:22/

从今天开始我们就开始学c++的容器了就不需要我们造轮子了

1.为什么学习string类

1.1c语言中的字符串

C 语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列
的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户
自己管理,稍不留神可能还会越界访问
2.标准库中的string类
2.1
string类的文档介绍
在使用string的时候必须包含头文件和using namespace std等;
2.2auto和范围for
auto 关键字
在早期 C/C++ auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,后来这个
不重要了。 C++11 中,标准委员会变废为宝赋予了 auto 全新的含义即: auto 不再是一个存储类型
指示符,而是作为一个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期
推导而得
auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际
只对第一个类型进行推导,然后用推导出来的类型定义其他变量
auto 不能作为函数的参数,可以做返回值,但是建议谨慎使用
auto 不能直接用来声明数组
// 不能做参数
void func2(auto a)
{}
// 可以做返回值,但是建议谨慎使用
auto func3()
{
return 3;
}
int a = 10;
auto b = a;
auto c = 'a';
auto d = func1();
// 编译报错:rror C3531: “e”: 类型包含“auto”的符号必须具有初始值设定项
auto e;

范围for

范围for可以用到数容器上进行遍历
范围 for 的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到
int array[] = { 1, 2, 3, 4, 5 };
// C++98的遍历
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
array[i] *= 2;
}
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
cout << array[i] << endl;
}
// C++11的遍历
for (auto& e : array)
e *= 2;

2.3string常用的接口

string的初始化

string s1{ 1,23,46 };
string s2 = { 1,2,3,4,5 };

这两种初始化都是可以的当然也可以那s1来初始化s2

string s2(s1);

2.3.1size()接口

这个就是见词知意

就是用来求数组的大小的比如

之前我们还需要去用sizeof现在用了容器我们可以调用容器里面的函数直接使用

2.3.2capacity()

这个是用来返回空间总大小的

2.3.3empty()

这个是用来判断字符串是否为空是返回true,否则返回false

2.3.4 clear()

这个是用来清除有效字符

2.3.5 reserve 

这个是用来为字符串预留空间比如

string s1{ 1,23,46 };
cout << s1.capacity();

这个空间大小是15

要是利用reserve

string s1{ 1,23,46 };
s1.reserve(20);
cout << s1.capacity();

他这个开辟空间就只有第一次是2被增容其他都是1.5扩大这个就是31

2.3.5 resize()

将有效字符的个数该成 n 个,多出的空间用字符 c 填充
string s1("hello world");
s1.resize(20,'x');
for (auto e : s1)
{cout << e << " ";
}

2.3.6 operator[]()

返回 pos 位置的字符, const string 类对象调用
std::string str ("Test string");for (int i=0; i<str.length(); ++i){std::cout << str[i];}

2.3.7 begin()和end()

begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位
置的迭代器
例如:
string s1("hello world");string::iterator it = s1.begin();
while (it != s1.end())
{cout << *it << " ";it++;
}

2.3.8 rbegin()和rend()

这个和上面差不多就是一个从前往后一个是从后往前

2.3.9 push_back()

这个就很简单了和我们之前写顺序表的时候一样这个就是尾插、

2.3.10 append()

这个就是在字符串后追加一个字符

string s1("hello world");s1.append("hello");
string::iterator it = s1.begin();
while (it != s1.end())
{cout << *it << " ";it++;
}

2.3.11operator+=

在字符串后追加字符串 str
std::string name ("John");std::string family ("Smith");name += " K. ";         // c-stringname += family;         // stringname += '\n';

2.3.12 find和npos

从字符串 pos 位置开始往后找字符 c ,返回该字符在字符串中的
位置
string s1("hello world");size_t f1 = s1.find("x");
if (f1 != string::npos)
{cout << s1[f1] << endl;
}
else
{cout << "没找到" << endl;
}

重点就这么多有兴趣的同学可以去官网查一下其他的使用


http://www.ppmy.cn/ops/146404.html

相关文章

Android笔试面试题AI答之Android基础(5)

Android入门请看《Android应用开发项目式教程》 文章目录 1.Android最新的系统架构和早期架构有什么区别&#xff1f;**1. 应用开发语言****2. UI 开发方式****3. 架构组件****4. 数据绑定****5. 后台任务管理****6. 安全性****7. 性能优化****8. 跨平台支持****9. 新兴技术集…

雷电模拟器安装LSPosed

雷电模拟器最新版支持LSPosed。记录一下安装过程 首先到官网下载并安装最新版&#xff0c;我安装的时候最新版是9.1.34.0&#xff0c;64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的&#xff0c;号称适配安卓7以上所有机型&#x…

并行和并发有什么区别?

并行与并发的基本定义 并行定义 并行是指系统同时执行多个任务&#xff0c;通常是通过同时拥有多个处理单元&#xff08;如多个CPU核心&#xff09;来实现的。在并行处理中&#xff0c;任务被分割成多个子任务&#xff0c;并且这些子任务同时执行&#xff0c;以加快整体处理速…

【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口

前言 前几年WPS还可以免费处理5页以内的PDF转excel&#xff0c;现在必须付费了&#xff0c;而且其他在线的PDF转excel都是要收费的&#xff0c;刚好前几年调研过百度OCR的高精度含位置接口&#xff0c;依然是每天可以免费调用50次&#xff0c;本篇是基于此接口&#xff0c;开发…

Gemma2 2B 模型的model.safetensors.index.json文件解析

Gemma2 2B 模型的 model.safetensors.index.json 文件解析 在使用 Gemma2 2B 模型或其他大型预训练模型时&#xff0c;model.safetensors.index.json 文件起到了索引的作用&#xff0c;它帮助我们了解模型的结构、参数存储方式以及如何加载模型的具体权重。本博客将深入解析该…

RSA公钥私钥对在线生成工具--可生成pem,xml,raw等密钥格式

支持生成pkcs8,pkcs1,xml,raw,openssh格式的公钥私钥对&#xff0c;如下图所示&#xff1a; 具体请访问:在线RSA公钥私钥对生成器--生成导出pkcs8/pkcs1 pem证书,raw,xml,openssh等格式,并可指定密钥长度

HTMLCSS:超炫丝滑的卡片水波纹效果

这段代码创建了一个卡片&#xff0c;卡片上有三个波动效果&#xff0c;这些波动效果通过 CSS 的keyframes 动画实现&#xff0c;创建了一个旋转的动画效果。这种效果适用于创建动态的视觉效果&#xff0c;例如音乐播放器的封面、动态背景或其他需要动态效果的界面元素。 演示效…

51.第二阶段x86游戏实战2-继续寻找lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…